この場合、中かっこ内のパラメータが拡張されないのはなぜですか?

この場合、中かっこ内のパラメータが拡張されないのはなぜですか?

たとえば、次のように中かっこ内にいくつかのファイル名を拡張したいとします。

$ ls
blue_texture  blue_waves  green_light
$ ls -m | tr -d ' \n'
blue_texture,blue_waves,green_light 
$ echo foo/bar/{`ls -m | tr -d ' \n'`}
foo/bar/{blue_texture,blue_waves,green_light}

サポート拡張がここで機能しないのはなぜですか?私はこれが次のように機能することを期待しています:

$ echo foo/bar/{blue_texture,blue_waves,green_light}
foo/bar/blue_texture foo/bar/blue_waves foo/bar/green_light

ベストアンサー1

これがうまくいかないのは、bash支柱の拡張が行われるからです。今後コマンドの置き換え(バッシュリファレンスマニュアルこれについての情報があります)。支柱が拡張されるまで交換は行われません。

これを行う唯一の方法はを使用することですeval欲しくないこの場合、ランダムなコマンドの実行が許可されます。

代わりに別の方法を見つける必要があります。これにより、目的の結果が生成されます。

for file in *; do
    printf '%s ' "foo/bar/$file"
done; echo

おすすめ記事