Ist das Erweitern eines Asterisks in der Variable durch `echo $TEST` ein Fehler?

Ist das Erweitern eines Asterisks in der Variable durch `echo $TEST` ein Fehler?

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.

verwandte Informationen