複数のキューからの 1 つの要素をそれぞれ含むいくつかのセットを構築する必要がある bash スクリプトがあります (配列を使用してこれらを格納することを検討しています)。たとえば、次のキューがある場合:
array1=(a b c e f)
array2=(x y z)
array3=(1 2 3 4)
次の配列を取得する必要があります (一度にすべてを取得する必要はありません。結果の配列を 1 つずつ処理します)。
斧1 2によって cz 3 e 4 へ
配列の数は動的です。
したがって、基本的には、各配列から最初の要素をポップして、別の配列に入れる必要があります。次のように、配列から最初の要素をポップできることを知っています。
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