não pode entender newline barra invertida em bash aspas duplas

0

de acordo com o documento do gnu ,

The backslash retains its special meaning only when followed by one of the following characters: ‘$’, ‘'’, ‘"’, ‘\’, or newline. Within double quotes, backslashes that are followed by one of these characters are removed.

Eu 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?

    
por user15964 17.04.2017 / 18:03

1 resposta

4

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.

    
por 17.04.2017 / 18:06

Tags