`echo $TEST` が変数内のアスタリスクを展開するのはバグですか?

`echo $TEST` が変数内のアスタリスクを展開するのはバグですか?

これはBashのバグでしょうか?

$ mkdir test && cd test && echo "a" > "some.file"
test$ echo '*'
*
test$ TEST=$(echo '*')
test$ echo $TEST
some.file

*2 番目の出力が単なるリテラル出力ではなく、(すべての) ファイル名への解決であるのはなぜですか*? Bash のバグのように見えますか?

Ubuntu 18.04、bash バージョン 4.4.19(1) リリースで試しました。他の OS でも同じ結果になると思われます。

答え1

いいえ、それはバグではありません。

echo '*'

リテラルを生成します*。したがって、この出力を次のコマンドのように置き換えると、

TEST=$(echo '*')

*変数に代入されます$TEST。その後、

echo $TEST

glob はここで展開されます。この最後のコマンドを実行し、ディレクトリを変更してから再度実行することで、これを確認できます。

*次のように言うと出力されます

echo "$TEST"

説明通りここ二重引用符により変数は展開できますが、グロブは展開されません。

関連情報