2014-12-07 47 views
3

什麼是採取一個bash數組變量的一個好方法:展開bash的數組花括號語法

lst=(a b c) 

,並把它變成一個大括號的語法,這樣,它給等同於聲明:

$ echo foo{a,b,c} 
fooa foob fooc 

?當然,我正在尋找替換擴展lst大括號。在我的具體情況下,使用for循環是不可能的(或者更確切地說,非常難看)。

最近我被到目前爲止是:

$ lst=(a b c); echo foo${lst[@]} 
fooa b c 

回答

8

回想一下,如果ary是數組,則${ary[@]/#/foo}膨脹是,ary,與foo前置到每個字段。同樣,${ary[@]/%/foo}foo附加到每個字段。看:

$ lst=(a b c) 
$ echo "${lst[@]/#/foo}" 
fooa foob fooc 
$ echo "${lst[@]/%/foo}" 
afoo bfoo cfoo 

你不需要爲evalprintf

像這樣,你可以放心地構建陣列:

$ lst=(a 'field with space' b) 
$ foolst=("${lst[@]/#/foo}") 
$ declare -p foolst 
declare -a foolst='([0]="fooa" [1]="foofield with space" [2]="foob")' 
+1

EVAL是... EVIL =) – 2014-12-07 19:05:58

+1

這是完美的,謝謝! – 2014-12-07 19:09:58

+0

Downvoter,請發表評論! ':)'。 – 2014-12-07 21:17:08