如何将2个数组组合成一个关联数组

如何将2个数组组合成一个关联数组

我需要将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第一的元素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 会更清晰。

根据记录,在 中zsh,要将两个数组转换为关联数组/哈希,您需要执行以下操作:

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

哪儿${array1:^array2}数组压缩运算符和@参数扩展标志用于保留空元素(用双引号引起来,类似于"$@")。 (顺便说一句,bash 哈希不支持空键)。

相关内容