2つの配列を連想配列に結合する方法

2つの配列を連想配列に結合する方法

合計を連想配列にARRAY1結合する必要があります。たとえば、次のコードを使用します。 ARRAY2ARRAY

 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次のとおりです。最初要素ARRAY2など):

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行目で何か間違っているようです。この問題を解決するにはどうすればよいですか?

ベストアンサー1

周囲にスペースがあってはいけません=

使用

hash[${array1[i]}]=${array2[i]}

IMOはより明確になります。

レコードの場合、zsh2 つの配列を連想配列/ハッシュに変換するには、次の操作を行う必要があります。

typeset -A hash
hash=("${(@)array1:^array2}")

${array1:^array2}どこに配列圧縮演算子および@パラメータ拡張フラグは、空の要素を保持するために使用されます(たとえば、二重引用符で囲まれます"$@")。 (ところで、bashハッシュはヌルキーをサポートしていません)。

おすすめ記事