Könnte jemand erklären, was sich hinter den Kulissen von Charakteren abspielt, die in der Linux-Shell entkommen? Ich habe Folgendes ausprobiert und viel gegoogelt, ohne Erfolg zu haben, was (und wie) vor sich geht:
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!
Ich bin dort total verloren. Warum geben beispielsweise drei Backslashes nur einen Backslash? Ich würde erwarten: die ersten beiden werden zu einem geflüchtet, der dritte wird nichts zu fliehen finden, so dass es ein Schrägstrich bleibt (Zeile im ersten Experiment), aber was passiert ist, dass die dritte gerade verschwindet.
Warum bekomme ich einen Backslash von vier \\\\ Hello? Ich würde erwarten, dass jedes Paar einen Backslash gibt -> zwei Backslashes.
Und warum brauche ich im letzten Fall drei Backslashes, um \ n zu entkommen? Was passiert im Hintergrund der Flucht, um das zu bekommen? und wie unterscheidet es sich von \\ncase?
Ich freue mich über jede Erklärung, was in den vorherigen Zeilen vor sich geht.
echo -e ist nicht sicher: echowird in Übereinstimmung mit dem Standard verhalten , wenn beide posixund xpg_echoRuntime - Optionen aktiviert sind, oder wenn mit dem entsprechenden Aufbauzeitmöglichkeiten zusammengestellt. Die sichere Vorgehensweise ist, printfstattdessen zu verwenden - siehe die Abschnitte APPLICATION USAGE und RATIONALE des obigen Links, in denen beschrieben wird, wie Sie printfals Ersatz für agieren können echo.
echo -eVerhalten ist sowieso nicht standarddefiniert - siehe pubs.opengroup.org/onlinepubs/9699919799/utilities/echo.html . Die Ausgabe ist vollständig implementierungsdefiniert, wenn die Eingaben einen wörtlichen Backslash enthalten. Die einzige zulässige Option ist-n(dh, für eine standardkonforme Implementierung wird die Ausgabeecho -egedruckt-e).