Unix-Echo-Befehl mit der Option -e

Unix-Echo-Befehl mit der Option -e

Ich habe über den Befehl in UNIX gelesen echound 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 UNIXimplementieren 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 fooin der Ausgabe ein Tabulatorzeichen vorangestellt ist.

Der Grund, warum Sie möglicherweise Probleme hatten, ist, dass Sie foo\\barBackslashes in doppelten Anführungszeichen bereits verwendet haben und die Shell diese bereits behandelt. Wenn Sie das echoVerhalten überprüfen möchten, müssen Sie einfache Anführungszeichen als Argumente verwenden.

verwandte Informationen