As aspas simples não deveriam ser aspas "duras" nos shells POSIX?
Por que o traço parece processar fugas dentro deles, ao contrário do Bash?
$ bash --posix -c "echo ['[\\n]']"
[[\n]]
$ dash -c "echo ['[\\n]']"
[[
]]
As aspas simples não deveriam ser aspas "duras" nos shells POSIX?
Por que o traço parece processar fugas dentro deles, ao contrário do Bash?
$ bash --posix -c "echo ['[\\n]']"
[[\n]]
$ dash -c "echo ['[\\n]']"
[[
]]
As aspas simples se comportam de forma idêntica, é a
echo
implementação que é diferente.Quando você executa
sh -c "echo ['[\\n]']"
(para qualquersh
), a primeira coisa que acontece é que seu shell interativo processa a string entre aspas duplas, transformando o\\
em um único\
. A string que é passada para o shell para execução é entãoecho ['[\n]']
.O
echo
comando (provavelmente embutido) lançado dentro desse shell interno vê o argumento único[[\n]]
e algumas implementações deecho
escapes de barra invertida no estilo C do processo, como\n
para nova linha, enquanto outras não.Em vez disso, tente
sh -c "printf '%s\\n' ['[\\n]']"
e veja Por que printf é melhor que echo?