ARRAY1
とARRAY2
をARRAY
のような連想配列に組み合わせる必要があります。私はこのコードを使用しています:
mapfile -t ARRAY1 < <(/bin/awk '{ print $ 1 }' /output/gen_branch)
mapfile -t ARRAY2 < <(/bin/awk '{ print $ 6 }' /output/gen_code )
declare -A ARRAY
for ((i=0; $i<${#ARRAY1[@]}; i++))
do
ARRAY+=( ["${ARRAY1[i]}"] = "${ARRAY2[i]}" )
done
##added this loop to check output
for value in "${!ARRAY[@]}"
do
echo "branch: $value"
echo "code: ${ARRAY[$value]}"
done
私はこのようなものがbashの他の部分でそれらを使用することを期待しています(ARRAY1
のfirst要素の値がARRAY2
のfirst要素であることが重要です):
ARRAY1=( b1 b2 b3 )
ARRAY2=( c1 c2 c3 )
ARRAY= ( [b1]=c1 [b2]=c2 [b3]=c3 )
しかし、コードを実行すると、次のエラーが発生します。
line 7: ARRAY: [b1]: must use subscript when assigning associative array
line 7: ARRAY: =: must use subscript when assigning associative array
line 7: ARRAY: c1: must use subscript when assigning associative array
(and it goes on like this for every entry)
私は7行目でそれをすべて間違っていると思いますこれを修正するにはどうすればよいですか?
=
の周囲にスペースがあってはなりません。
使用する
hash[${array1[i]}]=${array2[i]}
より読みやすいIMOになります。
記録として、zsh
で、2つの配列を連想配列/ハッシュに変換するには、次のようにします。
typeset -A hash
hash=("${(@)array1:^array2}")
ここで、${array1:^array2}
はarray zipping演算子であり、@
パラメーター展開フラグは空の要素を保持するために使用されます(二重引用符で囲み、"$@"
と同様)。 (ちなみに、bashハッシュは空のキーをサポートしていません)。