¿Por qué el comando hace eco `echo \\\z` genera \z?

¿Por qué el comando hace eco `echo \\\z` genera \z?

El comando echo $(echo \\\z)es deel libro , No entiendo por qué sale

\z

Creo que debería salir

z

Respuesta1

\es un operador de cotización para el shell. Cuando está fuera de otros tipos de comillas, \xes como 'x'(excepto cuando xestá el carácter de nueva línea).

Entonces:

echo \\\x

es como:

echo '\''x'

O

echo '\x'

Así echose invoca con dos argumentos, uno que contiene echo(su nombre) y otro que contiene \x.

Por POSIX, el comportamiento echocuando cualquiera de sus operandos (argumentos distintos del nombre del comando) contiene una barra invertida o su primer operando -nno está especificado. Descubrirá que el comportamiento varía incluso fuera de eso.

Según la especificación UNIX (con XSI aplicado en el enlace anterior), el comportamiento de echo '\z'tampoco está especificado ya que \zno es una de las secuencias de escape estándar.

Sin embargo, con un archivo compatible con UNIX echo, como el echointegrado de bash -o posix -O xpg_echo, puede tener la garantía de que:

echo '\\z'

igual que:

echo \\\\z

o:

echo \\\\\z

saldrá \z<newline>.

Aparte de eso, POSIX no obtendrá ninguna garantía.

La implementación podría generar zo \zo no such escape sequence: \zo un carácter NUL...

Sin embargo, en la práctica, no conozco ninguna implementación que se entienda \zcomo una secuencia de escape, por lo que encuentro que todas las que probé dan resultados \z<newline>allí.

Si desea una forma portátil y confiable de generar texto,no usar echo, usar printfen su lugar.

Respuesta2

Divida el eco de la declaración en secciones

\ es la variable que bash reconoce como escape

Por lo tanto \ está escapando del carácter "\" por lo tanto imprime \

\z escapa del carácter "z", por lo que imprime z

En conjunto, tenemos \z

información relacionada