Quelqu'un pourrait-il expliquer ce qui se passe dans les coulisses des personnages qui s'échappent dans le shell Linux? J'ai essayé ce qui suit et j'ai beaucoup cherché sur Google, sans réussir à comprendre ce qui se passe (et comment):
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!
Je suis totalement perdu là-bas, alors par exemple, pourquoi trois barres obliques inverses ne donnent-elles qu'une seule barre oblique inverse? Je m'attendrais à ce que les deux premiers soient échappés à un, le troisième ne trouverait rien à échapper donc il resterait une barre oblique (ligne dans la première expérience), mais ce qui se passe, c'est que le troisième est juste disparaît.
Pourquoi je reçois une barre oblique inverse sur quatre \\\\ Hello
? Je m'attends à ce que chaque paire donne une barre oblique inverse -> deux barres obliques inverses.
Et pourquoi ai-je besoin de trois barres obliques inverses dans le dernier cas pour m'échapper \ n? que se passe-t-il en arrière-plan de s'échapper pour l'obtenir? et en quoi est-ce différent du \\n
cas?
J'apprécie toute explication de ce qui se passe dans les lignes précédentes.
echo -e
n'est pas sûr: echo
se comportera conformément à la norme si les deux options posix
et xpg_echo
les options d'exécution sont activées, ou si elles sont compilées avec des options de construction équivalentes. La pratique sécuritaire consiste à utiliser à la printf
place - voir les sections UTILISATION DE L'APPLICATION et JUSTIFICATION du lien ci-dessus décrivant comment faire printf
agir en remplacement echo
.
echo -e
le comportement n'est de toute façon pas défini par les normes - voir pubs.opengroup.org/onlinepubs/9699919799/utilities/echo.html . La sortie est complètement définie par l'implémentation s'il y a une barre oblique inverse littérale n'importe où dans les entrées, et la seule option autorisée est-n
(ce qui signifie qu'une implémentation conforme aux normes aura uneecho -e
impression-e
sur sa sortie).