¿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
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).echo -e
no es seguro:echo
se comportará de acuerdo con la norma si ambosposix
yxpg_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 usarprintf
en su lugar: consulte las secciones USO DE LA APLICACIÓN y JUSTIFICACIÓN del enlace anterior que describe cómo hacer queprintf
actúe como un reemplazoecho
.