Unixスクリプト、2次元配列の問題

Unixスクリプト、2次元配列の問題

たとえば、ファイルを参照する2つの配列があります。

alpha=file 1
beta=file2
Charlie=file3
delta=file4
beta2=file5
beta3=file6
Charlie2=file7
charlie3=file8
delta2=file9
delta3=file10

array1=("$alpha" "$beta" "$Charlie" "$delta)
array2=("$beta2" "$beta3" "$Charlie2" "$Charlie3" "$delta1 "$delta3")

次に、これらのファイルの例を繰り返して一緒に使用するアルゴリズムがあります。

for ((i=0;2;i++))
do
   for((j=0;2;j++))
   do
     ./${array1[$i]}.sh ${array2[$j]}.in        
   done
done

問題は、array1とarray2が一致したいということです。

例えば

./file2.sh file5.in

しかし、私は決してそうすることができませんでした。これは、jがすべてのループに対してリセットされたときです。この問題に対する解決策は何ですか?

ベストアンサー1

array1の最初の項目がarray2の最初の項目に対応するようにするには、入れ子になったループは必要ありません。同じインデックス変数を使用できます。

for i in {0..2}; do
    "./${array1[i]}.sh" "${array2[i]}.in"
    # ..........^.................^
done

または連想配列を使用します。

declare -A map=(
    [$alpha]=$beta2
    [$beta]=$beta3
    [$Charlie]=$Charlie2
    [$delta]=$Charlie3
)

for key in "${!map[@]}"; do
    do_something_with "$key" and "${map[$key]}"
done

おすすめ記事