変数のアスタリスクを拡張する `echo $TEST` のバグですか? [コピー]

変数のアスタリスクを拡張する `echo $TEST` のバグですか? [コピー]

これはバッシュバグですか?

$ 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"

説明どおりここ、二重引用符は変数拡張を許可しますが、グローバル拡張は許可しません。

おすすめ記事