não consigo entender a nova linha da barra invertida entre aspas duplas do bash

não consigo entender a nova linha da barra invertida entre aspas duplas do bash

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 \nem C:

$ p="a\
b"; echo "$p"
ab

O resultado é abmais do que \a<newline>buma 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 à pvariável, não quando você echoatribui.

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.

informação relacionada