Ist das ein Bash-Fehler?
$ mkdir test && cd test && echo "a" > "some.file"
test$ echo '*'
*
test$ TEST=$(echo '*')
test$ echo $TEST
some.file
Warum ist die zweite Ausgabe die Auflösung *
in (alle) Dateinamen und nicht nur eine wörtliche *
Ausgabe? Sieht nach einem Fehler in Bash aus?
Ausprobiert auf Ubuntu 18.04, Bash-Version 4.4.19(1)-Release. Erwartet, dass es auf anderen Betriebssystemen genauso sein wird.
Antwort1
Nein, es ist kein Fehler. Sie haben gezeigt, dass
echo '*'
wird ein Literal erzeugen *
. Wenn Sie also diese Ausgabe ersetzen, gemäß dem folgenden Befehl
TEST=$(echo '*')
es wird *
in die Variable eingefügt $TEST
. Dann, wenn Sie
echo $TEST
der Glob wird hier erweitert. Sie können dies überprüfen, indem Sie diesen letzten Befehl ausführen, das Verzeichnis wechseln und ihn dann erneut ausführen.
Sie erhalten die *
Ausgabe, wenn Sie sagen
echo "$TEST"
wie erklärtHier, die doppelten Anführungszeichen ermöglichen die Erweiterung der Variable, verhindern jedoch die Erweiterung des Globs.