Der Unterschied zwischen den notierte und nicht notierte Versionen auf Ihrer Shell abhängen kann, aber am wahrscheinlichsten ist:
- zitiert,
"$foo"
ein einziges Argument darstellt, die an den echo
Befehl übergeben, die sie wörtlich druckt, gefolgt durch eine neue Zeile.
- nicht quoted,
$foo
erweitert zu einer Reihe von Argumenten getrennt durch $IFS
. Wenn $IFS
nicht festgelegt ist, wird standardmäßig ein Leerzeichen verwendet. Wenn es kein Feldtrennzeichen gibt, haben Sie nur ein Feld.
In der nicht notierten Version, gibt es keinen Grund zu erwarten, dass die Newline einen Teil der Ausgabe berücksichtigt werden, da es nicht einmal wirklich Teil des Eingangs zum echo
Befehl ist. Es trennt einfach Argumente.
Wenn Sie dieses Verhalten ändern möchten, können Sie Ihre $IFS
Einstellung ändern, aber ich empfehle es nicht. Ändern Sie IFS, wenn Sie Felder verarbeiten müssen, um Ihre Ausgabe nicht zu formatieren.
Für eine vorhersehbare Ausgabe folgen Sie der Empfehlung POSIX.1 und verwenden Sie echo
überhaupt nicht. Verwenden Sie stattdessen printf
.
@DevNull Danke, ich wusste diesen Weg. Mein wirkliches Problem ist, warum sich echo $ foo und echo "$ foo" hier anders verhalten – nathan
Ahh, nachdem ich die akzeptierte Antwort gesehen habe, sehe ich, wonach du gesucht hast. Gut, dass es sich ausgezahlt hat. Prost! – DevNull