de acordo comdocumento gnu,
A barra invertida mantém seu significado especial somente quando seguida por um dos seguintes caracteres: '$', '`', '"', '\' ou nova linha. Entre aspas duplas, as barras invertidas seguidas por um desses caracteres são removidas .
tentei
p="a\$b";echo $p # a$b
p="a\`b";echo $p # a`b
p="a\"b";echo $p # a"b
p="a\\b";echo $p # a\b
tudo está bem. Mas nova linha ??
p="a\newlineb";echo $p # a\newlineb
O que significa nova linha no documento?
Responder1
Nova linha é o nome do caractere de nova linha, ou seja, o caractere normalmente escrito como \n
em C:
$ p="a\
b"; echo "$p"
ab
O resultado é ab
mais do que \a<newline>b
uma vez que oO padrão POSIX diz:
Um
<backslash>
que não esteja entre aspas preservará o valor literal do caractere seguinte, com exceção de a<newline>
. Se a<newline>
seguir<backslash>
o shell deve interpretar isso como continuação de linha. O<backslash>
e<newline>
deve ser removido antes de dividir a entrada em tokens. Como o escape<newline>
é removido inteiramente da entrada e não é substituído por nenhum espaço em branco, ele não pode servir como separador de token.
Mas a cordaécitado com aspas duplas... Bem, este é um caso especial:
O
<backslash>
deve manter seu significado especial como caractere de escape somente quando seguido por um dos seguintes caracteres quando considerado especial:$
,`
,"
,\
,<newline>
.
Portanto, a string entre aspas significa que a barra invertida-nova linha é interpretada como se fossenãocitado, o que significa que ele atua como uma continuação de linha e tanto a barra invertida quanto a nova linha são removidas.
Observe que isso acontece quando você atribui à p
variável, não quando você echo
atribui.
Veja tambémImplicações de segurança de esquecer de citar uma variável em shells bash/POSIXsobre a necessidade de citar suas variáveis, sempre.