¿Podría alguien explicar qué está sucediendo detrás de escena en el escape de personajes en el shell de Linux? Intenté lo siguiente y busqué mucho en Google, sin ningún éxito en comprender qué (y cómo) está sucediendo:
root@sv01:~# echo -e "\ Hello!"
\ Hello!
root@sv01:~# echo -e "\\ Hello!"
\ Hello!
root@sv01:~# echo -e "\\\ Hello!"
\ Hello!
root@sv01:~# echo -e "\\\\ Hello!"
\ Hello!
root@sv01:~# echo -e "\\\\\ Hello!"
\\ Hello!
root@sv01:~# echo -e "\\\\\\ Hello!"
\\ Hello!
root@sv01:~# echo -e "\\\\\\\ Hello!"
\\ Hello!
root@sv01:~# echo -e "\\\\\\\\ Hello!"
\\ Hello!
root@sv01:~# echo -e "\\\\\\\\\ Hello!"
\\\ Hello!
root@sv01:~# echo -e "\n Hello!"
Hello!
root@sv01:~# echo -e "\\n Hello!"
Hello!
root@sv01:~# echo -e "\\\n Hello!"
\n Hello!
Estoy totalmente perdido allí, así que, por ejemplo, ¿por qué tres barras diagonales inversas solo dan una barra diagonal inversa? Esperaría: los dos primeros se escaparán a uno, el tercero no encontrará nada para escapar, por lo que seguirá siendo una barra oblicua (línea en el primer experimento), pero lo que está sucediendo es que el tercero simplemente desaparece.
¿Por qué obtengo una barra diagonal inversa de cuatro \\\\ Hello
? Esperaría que cada par dé una barra diagonal inversa -> dos barras diagonales inversas.
¿Y por qué necesito tres barras invertidas en el último caso para \ n escapar? ¿Qué está pasando en el fondo de escapar para conseguir eso? ¿Y en qué se diferencia del \\n
caso?
Agradezco cualquier explicación de lo que está sucediendo en las líneas anteriores.
echo -e
no es seguro: echo
se comportará de acuerdo con la norma si ambos posix
y xpg_echo
están habilitados en tiempo de ejecución opciones, o si compilados con opciones de tiempo de compilación equivalentes. La práctica segura es usar printf
en su lugar: consulte las secciones USO DE LA APLICACIÓN y JUSTIFICACIÓN del enlace anterior que describe cómo hacer que printf
actúe como un reemplazo echo
.
echo -e
de todos modos, el comportamiento no está definido por los estándares; consulte pubs.opengroup.org/onlinepubs/9699919799/utilities/echo.html . La salida está completamente definida por la implementación si hay una barra diagonal inversa en cualquier lugar de las entradas, y la única opción permitida es-n
(lo que significa que una implementación que cumpla con los estándares tendrá unaecho -e
impresión-e
en su salida).