Ich habe über den Befehl in UNIX gelesen echo
und die Option gefunden -e
, mit der die Interpretation von Backslash-Escapezeichen aktiviert wird. Eine dieser Backslash-Escapezeichenfolgen war \ \ , aber als ich die beiden Befehle verwendet habe:
echo "hello\\\world"
Und
echo -e "hello\\\world"
ich bekomme die gleiche Ausgabe: hallo\\welt, also was ist der Unterschied? |
Antwort1
Standardmäßig werden Escape-Sequenzen erweitert, die Option -e ist nicht standardmäßig.
Wenn Ihre Echo-Implementierung -e nicht in der Echo-Ausgabe enthält, ist sie nicht konform.
Das Problem hierbei besteht darin, dass es Implementierungen gibt, die nur die minimalen POSIX-Anforderungen erfüllen und die Tatsache ignorieren, dass eine Plattform, die als -kompatibel bezeichnet werden darf, Unterstützung für die POSIX- Erweiterungen UNIX
implementieren muss .XSI
Übrigens: Bash wird unter MacOS X und Solaris so kompiliert, dass Escape-Sequenzen immer erweitert werden. Bash ist in der Standardkompilierungsvariante nicht POSIX XSI-kompiliert.
POSIX-kompatible Shells wie ksh93, bosh oder dash erweitern Escape-Sequenzen standardmäßig nach Bedarf.
Wenn Sie das Verhalten überprüfen möchten, ist Ihr Teststring keine gute Idee. Ein besserer Test wäre:
echo '\tfoo'
und um zu prüfen, ob foo
in der Ausgabe ein Tabulatorzeichen vorangestellt ist.
Der Grund, warum Sie möglicherweise Probleme hatten, ist, dass Sie foo\\bar
Backslashes in doppelten Anführungszeichen bereits verwendet haben und die Shell diese bereits behandelt. Wenn Sie das echo
Verhalten überprüfen möchten, müssen Sie einfache Anführungszeichen als Argumente verwenden.