0
我有一個bash腳本,需要建立一些集合,每個集合包含來自多個隊列的一個元素(我正在考慮使用數組來存儲這些) 例如,如果我有以下隊列:在bash中間接引用的數組的訪問範圍
array1=(a b c e f)
array2=(x y z)
array3=(1 2 3 4)
我需要獲得下列陣列(一次全部不一定,I過程所得到的陣列一次一個)
a x 1 b y 2 c z 3 e 4 f
陣列的數目是動態的。
所以基本上我需要彈出每個數組的第一個元素,並放入另一個數組。 我知道可以從一個這樣的數組彈出的第一個元素:
el1=${array1[0]}
array1=(${array1[@]:1:$((${#array1[@]}))})
而且,我知道我可以從一個間接引用的數組這樣提取一個值:
val=$(eval echo \${$arr[0]})
我的問題是:我如何重寫從數組中彈出第一個元素以使用間接引用的部分。
以下是完整的測試腳本:
#!/bin/bash
set -e
set -u
array1=(a b c e f)
array2=(x y z)
array3=(1 2 3 4)
finished=false
while ! $finished; do
finished=true
array4=()
for arr in array1 array2 array3; do
val=$(eval echo \${$arr[0]})
if [ ! -z $val ]; then
array4=(${array4[@]} $val)
$arr=(\${$arr[@]:1:$((\${#$arr[@]}))})
fi
done
l4=${#array4[@]}
if [ $l4 -gt 0 ]; then
finished=false
for i in ${array4[@]}; do
echo $i
done
fi
done
Thanks.I想通了,最終我可以使用,而不是試圖流行元素的索引。但是,我不知道$ {!array *}和((cnt ++))構造。 – MasterF 2012-04-11 10:23:50