2015-11-22 47 views
1

我正在嘗試使用其他數組的組合來生成一個新的數組,尊重特定的序列。在純粹的Bash。 例子:Bash與其他數組的有序輸入組成新陣列

numbers=(0 1 2 3 4 5 6 7 8); 

colors=(red blue green); 

loop_sequence=(numbers numbers colors numbers colors colors) 

出來的例子:

0 
1 
red 
2 
blue 
green 
3 
4 
red 
5 
blue 
green 
6 
7 
red 
8 
blue 
green 
0 
1 
red 
2 
blue 
green... 

但我發現很難做出迭代的內部循環。 任何幫助非常歡迎。

+0

重複:http://unix.stackexchange.com/q/244759/4667 –

回答

0

你可以使用這個腳本:

numbers=(0 1 2 3 4 5 6 7 8) 
colors=(red blue green) 
loop_sequence=(numbers numbers colors numbers colors colors)  
numLen=${#numbers[@]} 
colLen=${#colors[@]} 

arr=() # output array 
max=3 # max counter 
for ((r=0; r<max; r++)); do 
    for i in "${loop_sequence[@]}"; do 
     [[ $i == numbers ]] && arr+=("${numbers[$((n++ % numLen))]}") || 
      arr+=("${colors[$((c++)) % colLen]}") 
    done 
done 

printf "%s\n" "${arr[@]}" 

輸出:

0 
1 
red 
2 
blue 
green 
3 
4 
red 
5 
blue 
green 
6 
7 
red 
8 
blue 
green 
+0

Debian的,bash的4 ,我得到:declare:-n:無效選項 – nagualcode

+1

'declare -n'是'bash'的新手4.3 – chepner

+0

@Fredfs:檢查更新後的答案。它也應該在舊的BASH版本中工作。 – anubhava