これは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"
説明通りここ二重引用符により変数は展開できますが、グロブは展開されません。