Bashスクリプトで同時に処理したい2つの配列があります。最初の配列には一種のラベルが含まれています。 2番目の配列には、次の値が含まれます。
LABELS=(label1 label2 label3 labe4 )
VALUES=(91 18 7 4)
必要なもの:次のように、LABELS配列のインデックス項目とVALUES配列の対応する項目値の前にエコーするループ。
label1 91
label2 18
label3 7
label4 4
入れ子になったループがうまくいかないと思います。以下で試しましたが、構文によると機能しません。
for label in {LABELS[@]} && value in {VALUES[@]}
do
echo ${label} ${value}
done
ベストアンサー1
数値インデックスを使用し、インデックスとして配列要素を参照してください。
labels=(label1 label2 label3 label4)
values=(91 18 7 4)
for((i=0; i<"${#labels[@]}"; i++ )); do
printf '%s: %s\n' "${labels[i]}" "${values[i]}"
done
または、比較的新しい(> =バージョン4)bashまたは関連配列をサポートする別のシェルを使用している場合は、単一の配列を使用できます。
declare -A values=( ["label1"]=91 ["label2"]=18 \
["label3"]=7 ["label4"]=4 )
for label in "${!values[@]}"; do
printf '%s: %s\n' "$label" "${values[$label]}"
done
シェルスクリプトでローカル変数に大文字を使用するのは悪い習慣であり、グローバル環境変数は慣例的に大文字で表示されるため、スクリプトで大文字を使用すると変数名の競合が発生する可能性があるため、変数名を小文字に変更しました.