Was ist der Unterschied zwischen der Verwendung
echo -e "Hello\nWorld"
und
echo $"Hello\nWorld"
geben sie nicht beide aus:
Hello
World
command-line
bash
Kennzeichen
quelle
quelle
Hello\nWorld
. Sie benötigen den-e
Schalter, um Escape-Zeichen zu interpretieren.echo $'Hello\nWorld'
, die in zwei Zeilen unter Bash ausgedruckt werden.Antworten:
echo -e
undecho $'...'
sind beide ähnlich, da sie die folgenden Escape-Sequenzen unterstützen:Sie haben Unterschiede. Darüber hinaus
echo -e
unterstützt:Im Gegensatz dazu
$'....'
unterstützt:Beachten Sie, dass die
\c
Erweiterungen zwischen den beiden nicht kompatibel sind:Unterdrückt für
echo -e
oben\c
weitere Ausgaben und ignoriert dabei dieIstop
. Im Gegensatz dazu für$'...'
die\cI
als Tab interpretiert.Die optisch ähnliche Form:
$"..."
Im Gegensatz dazu
$'...'
ist die Funktion von$"..."
ganz anders. Dadurch wird die Zeichenfolge, die sie enthält, entsprechend dem aktuellen Gebietsschema übersetzt.Die
echo -e
Kontroverseecho -e
wird von Shells nicht allgemein unterstützt und viele sehen die-e
Option als Designfehler an. Beobachten:Wie Sie sehen,
echo
können die Ergebnisse unerwartet sein , wenn das, mit dem Sie drucken, mit einem Bindestrich beginnt. Wenn Sie nicht sicher sind, dass die erste Zeichenfolge, mit der Sie drucken,echo
nicht mit einem Bindestrich beginnt, ist es wahrscheinlich besser, sie zu verwendenprintf
.Aus diesen Gründen kommt der POSIX-Standard zu folgendem Schluss :
Chet Ramey, der in
bash
den letzten 22 Jahren gewartet hat , stimmt zu :quelle
printf
nichtecho
*
) ist eigentlich nicht spezifischecho
. Dies geschieht mit jedem Befehl, der kurze oder lange Optionen erkennt (auf herkömmliche Weise geschrieben) und Dateinamenoperanden verwendet, einschließlichls
. Wahrscheinlich ist die Situation etwas schlimmer,echo
da (wie Ihre Quelle erwähnt)echo
normalerweise nicht akzeptiert wird--
, das Ende von Optionen anzugeben, während man Befehle wie schreiben kannls -- *l
. (Und eigentlich sollte man Befehle normalerweise so schreiben, wenn man Globs verwendet, die mit*
oder beginnen-
, insbesondere in Skripten.)\n
Escape - Sequenz, so in der Tat ist es egal , ob ich verwendenecho -e '...'
,echo $'...'
oderecho $"..."