
Respuesta1
\
es un operador de cotización para el shell. Cuando está fuera de otros tipos de comillas, \x
es como 'x'
(excepto cuando x
está el carácter de nueva línea).
Entonces:
echo \\\x
es como:
echo '\''x'
O
echo '\x'
Así echo
se invoca con dos argumentos, uno que contiene echo
(su nombre) y otro que contiene \x
.
Por POSIX, el comportamiento echo
cuando cualquiera de sus operandos (argumentos distintos del nombre del comando) contiene una barra invertida o su primer operando -n
no 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 \z
no es una de las secuencias de escape estándar.
Sin embargo, con un archivo compatible con UNIX echo
, como el echo
integrado 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 z
o \z
o no such escape sequence: \z
o un carácter NUL...
Sin embargo, en la práctica, no conozco ninguna implementación que se entienda \z
como 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 printf
en 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