たとえば、次のように中かっこ内にいくつかのファイル名を拡張したいとします。
$ 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