web-dev-qa-db-ja.com

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

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

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

2番目の出力が、単なる*出力ではなく、*から(すべての)ファイル名に解決されるのはなぜですか?バッシュのバグのように見えますか?

Ubuntu 18.04、bashバージョン4.4.19(1)-releaseで試してみました。他のOSでも同じになることを期待してください。

3

いいえ、バグではありません。あなたはそれを示しました

echo '*'

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

TEST=$(echo '*')

*を変数$TESTに入れます。その後、あなたが

echo $TEST

グロブはここで拡大します。これを確認するには、この最後のコマンドを実行し、ディレクトリを変更してから、もう一度実行します。

あなたが言うならあなたは*出力を得るでしょう

echo "$TEST"

説明したように here のように、二重引用符を使用すると変数を展開できますが、グロブが展開されません。

13
Sparhawk