これはバッシュのバグですか?
$ 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でも同じになることを期待してください。
いいえ、バグではありません。あなたはそれを示しました
echo '*'
リテラル*
を生成します。したがって、次のコマンドのように、この出力を置き換えると
TEST=$(echo '*')
*
を変数$TEST
に入れます。その後、あなたが
echo $TEST
グロブはここで拡大します。これを確認するには、この最後のコマンドを実行し、ディレクトリを変更してから、もう一度実行します。
あなたが言うならあなたは*
出力を得るでしょう
echo "$TEST"
説明したように here のように、二重引用符を使用すると変数を展開できますが、グロブが展開されません。