我需要结合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行上做错了所有该怎么做才能解决此问题?
的周围不能有空格=
。
使用
hash[${array1[i]}]=${array2[i]}
会更清晰的IMO。
为了记录在中zsh
,要将两个数组转换为关联数组/哈希,您需要执行以下操作:
typeset -A hash
hash=("${(@)array1:^array2}")
其中${array1:^array2}
在所述阵列压缩和解运算符和@
参数扩展标志是用来保存空元素(在双引号,类似"$@"
)。(顺便说一句,bash哈希不支持空键)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句