2009-11-10 44 views
2

所以,如果我有一個bash數組:使bash的陣列從逐步增加另一個陣列

ar=("one" "two" "three" "four") 

是什麼力量讓一個新的陣列,使得它看起來像這樣的最佳方式:

ar-new=("one" "one two" "one two three" "one two three four") 

我編寫了一些在for循環中使用for循環並使用seq的東西。有沒有更好/更優雅的方式來完成這一點?

+1

轉儲無論你「熟」,我們將看到如何改善它 – 2009-11-10 07:52:19

+0

你解決了什麼實際問題? – ghostdog74 2009-11-10 07:53:27

回答

1

這裏的另一種方式:

for ((i=1; i<=${#ar[@]}; i++)) 
do 
    ar_new+=("${ar[*]:0:$i} ") 
done 
+0

甜到底我在找什麼(用bash變量本身進行一些操作) – polyglot 2009-11-10 17:40:18

0

根據你正在嘗試完成的內容,你可以在一個循環內完成而不需要任何外部命令。

使用算術for循環:

typeset -a ar 
ar=("one" "two" "three" "four") 
typeset -a ar_new=() 
p="" 
for ((i=0; i < ${#ar[@]}; ++i)); do 
    p="$p${p:+ }${ar[$i]}" 
    ar_new[$i]="$p" 
done 

使用字符串for循環迴路(可能不適合大型陣列工作?可能是大型陣列較慢):

typeset -a ar 
ar=("one" "two" "three" "four") 
typeset -a ar_new=() 
p="" 
for s in "${ar[@]}"; do 
    p="$p${p:+ }$s" 
    ar_new=("${ar_new[@]}" "$p") 
done