de acuerdo añu doc,
La barra invertida conserva su significado especial solo cuando va seguida de uno de los siguientes caracteres: '$', '`', '"', '\' o nueva línea. Entre comillas dobles, las barras invertidas seguidas de uno de estos caracteres se eliminan .
Lo intenté
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
todo está bien. ¿Pero nueva línea?
p="a\newlineb";echo $p # a\newlineb
¿Qué significa nueva línea en el documento?
Respuesta1
Nueva línea es el nombre del carácter de nueva línea, es decir, el carácter que normalmente se escribe como \n
en C:
$ p="a\
b"; echo "$p"
ab
El resultado es ab
más que \a<newline>b
desde elEl estándar POSIX dice:
A
<backslash>
que no esté entrecomillado conservará el valor literal del siguiente carácter, con excepción de<newline>
. Si<newline>
sigue a<backslash>
, el shell interpretará esto como una continuación de línea. El<backslash>
y<newline>
se eliminará antes de dividir la entrada en tokens. Dado que el escape<newline>
se elimina por completo de la entrada y no se reemplaza por ningún espacio en blanco, no puede servir como separador de tokens.
Pero la cuerdaescitado entre comillas dobles... Bueno, este es un caso especial:
Conservará
<backslash>
su significado especial como carácter de escape solo cuando esté seguido de uno de los siguientes caracteres cuando se considere especial :$
,`
,"
,\
.<newline>
Entonces, la cadena entre comillas dobles significa que la barra invertida de nueva línea se interpreta como si fueranoentrecomillado, lo que significa que actúa como una continuación de línea y se eliminan tanto la barra invertida como la nueva línea.
Tenga en cuenta que esto sucede cuando asigna la p
variable, no cuando echo
la asigna.
Ver tambiénImplicaciones de seguridad de olvidarse de citar una variable en shells bash/POSIXsobre la necesidad de citar sus variables, siempre.