Bash
為什麼大括號中的參數在這種情況下不展開?
例如,我想將一些文件名放在大括號內進行擴展,如下所示:
$ 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
這不起作用的原因是在命令替換之前
bash
執行大括號擴展( Bash 參考手冊有一些關於此的資訊)。直到已經發生大括號擴展之後才會執行替換。您可以做到這一點的唯一方法是使用
eval
,但在這種情況下不要這樣做,因為您將允許執行任意命令。相反,您必須尋求其他方法。這應該會產生您尋求的輸出:
for file in *; do printf '%s ' "foo/bar/$file" done; echo