これはバッシュバグですか?
$ 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)リリースを試してみました。これは他のオペレーティングシステムでも同様であると予想されます。
答え1
いいえ、これはバグではありません。あなたは証明しました
echo '*'
リテラルを生成するので、*
この出力を置き換えるときは、次のコマンドに従ってください。
TEST=$(echo '*')
*
変数に入れられます$TEST
。だからあなたはいつ
echo $TEST
ここで世界は拡大します。最後のコマンドを実行してディレクトリを変更してから、もう一度実行してそれを確認できます。
*
出力を得ると言ったら
echo "$TEST"
説明どおりここ、二重引用符は変数拡張を許可しますが、グローバル拡張は許可しません。