0
複数のキューから1つの要素を含むいくつかのセットをビルドする必要がある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