Newline é o nome do caractere de nova linha, ou seja, o caractere geralmente escrito como \n
em C:
$ p="a\
b"; echo "$p"
ab
O resultado é ab
em vez de \a<newline>b
, pois o padrão POSIX diz :
A
<backslash>
that is not quoted shall preserve the literal value of the following character, with the exception of a<newline>
. If a<newline>
follows the<backslash>
the shell shall interpret this as line continuation. The<backslash>
and<newline>
shall be removed before splitting the input into tokens. Since the escaped<newline>
is removed entirely from the input and is not replaced by any white space, it cannot serve as a token separator.
Mas a string é citada com aspas duplas ... Bem, este é um caso especial:
The
<backslash>
shall retain its special meaning as an escape character only when followed by one of the following characters when considered special:$
,'
,"
,\
,<newline>
.
Portanto, a cadeia entre aspas duplas significa que a linha invertida-nova linha é interpretada como se não fosse citada, o que significa que ela funciona como uma continuação de linha e a barra invertida e a nova linha são removidas .
Observe que isso acontece quando você atribui à variável p
, não quando você echo
it.
Veja também " link "sobre a necessidade de citar suas variáveis, sempre.