eu preciso combinar ARRAY1
e ARRAY2
em uma matriz associativa como ARRAY
. estou usando este código:
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
espero que algo assim os use em outras partes do bash (é importante que o valor do primeiro elemento de ARRAY1
seja o primeiro elemento de ARRAY2
e assim por diante):
ARRAY1=( b1 b2 b3 )
ARRAY2=( c1 c2 c3 )
ARRAY= ( [b1]=c1 [b2]=c2 [b3]=c3 )
mas quando executo meu código, recebo este erro:
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)
acho que estou fazendo tudo errado na linha 7.o que devo fazer para corrigir isso?
Não deve haver espaços ao redor do
=
.Usando
seria mais legível IMO.
Para o registro, em
zsh
, para transformar dois arrays em um array/hash associativo, você faria:Onde
${array1:^array2}
está o operador de compactação de array@
e o sinalizador de expansão de parâmetro é usado para preservar elementos vazios (entre aspas duplas, semelhante a"$@"
). (a propósito, hashes bash não suportam chaves vazias).