Was ist der Unterschied zwischen der Verwendung
echo -e "Hello\nWorld"
und
echo $"Hello\nWorld"
geben sie nicht beide aus:
Hello
World
echo $'Hello\nWorld'
, die in zwei Zeilen unter Bash ausgedruckt werden.
Was ist der Unterschied zwischen der Verwendung
echo -e "Hello\nWorld"
und
echo $"Hello\nWorld"
geben sie nicht beide aus:
Hello
World
echo $'Hello\nWorld'
, die in zwei Zeilen unter Bash ausgedruckt werden.
Antworten:
echo -e
und echo $'...'
sind beide ähnlich, da sie die folgenden Escape-Sequenzen unterstützen:
\a alert (bell)
\b backspace
\e
\E an escape character
\f form feed
\n new line
\r carriage return
\t horizontal tab
\v vertical tab
\\ backslash
\0nnn the eight-bit character whose value is the octal value nnn (zero to three octal digits)
\xHH the eight-bit character whose value is the hexadecimal value HH (one or two hex digits)
\uHHHH the Unicode (ISO/IEC 10646) character whose value is the hexadecimal value HHHH (one to four hex digits)
\UHHHHHHHH
the Unicode (ISO/IEC 10646) character whose value is the hexadecimal value HHHHHHHH (one to eight hex digits)
Sie haben Unterschiede. Darüber hinaus echo -e
unterstützt:
\c suppress further output
\0nnn the eight-bit character whose value is the octal value nnn (zero to three octal digits)
Im Gegensatz dazu $'....'
unterstützt:
\' single quote \" double quote \nnn the eight-bit character whose value is the octal value nnn (one to three digits) \cx a control-x character
Beachten Sie, dass die \c
Erweiterungen zwischen den beiden nicht kompatibel sind:
$ echo -e 'start\n\cIstop'
start
$ echo $'start\n\cIstop'
start
stop
Unterdrückt für echo -e
oben \c
weitere Ausgaben und ignoriert dabei die Istop
. Im Gegensatz dazu für $'...'
die \cI
als Tab interpretiert.
$"..."
Im Gegensatz dazu $'...'
ist die Funktion von $"..."
ganz anders. Dadurch wird die Zeichenfolge, die sie enthält, entsprechend dem aktuellen Gebietsschema übersetzt.
echo -e
Kontroverseecho -e
wird von Shells nicht allgemein unterstützt und viele sehen die -e
Option als Designfehler an. Beobachten:
$ ls
-e -n
$ echo *
$ printf "%s\n" *
-e
-n
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 verwenden printf
.
Aus diesen Gründen kommt der POSIX-Standard zu folgendem Schluss :
Für neue Anwendungen wird empfohlen, printf anstelle von echo zu verwenden.
Chet Ramey, der in bash
den letzten 22 Jahren gewartet hat , stimmt zu :
[N] Der neue Code sollte printf verwenden.
*
) ist eigentlich nicht spezifisch echo
. 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 kann ls -- *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 verwenden echo -e '...'
, echo $'...'
oderecho $"..."
Hello\nWorld
. Sie benötigen den-e
Schalter, um Escape-Zeichen zu interpretieren.