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 -eund 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 -eunterstü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 \cErweiterungen zwischen den beiden nicht kompatibel sind:
$ echo -e 'start\n\cIstop'
start
$ echo $'start\n\cIstop'
start
stop
Unterdrückt für echo -eoben \cweitere Ausgaben und ignoriert dabei die Istop. Im Gegensatz dazu für $'...'die \cIals 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 -eKontroverseecho -ewird von Shells nicht allgemein unterstützt und viele sehen die -eOption als Designfehler an. Beobachten:
$ ls
-e -n
$ echo *
$ printf "%s\n" *
-e
-n
Wie Sie sehen, echokö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, echonicht 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 bashden 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, echoda (wie Ihre Quelle erwähnt) echonormalerweise 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.)
\nEscape - Sequenz, so in der Tat ist es egal , ob ich verwenden echo -e '...', echo $'...'oderecho $"..."
Hello\nWorld. Sie benötigen den-eSchalter, um Escape-Zeichen zu interpretieren.