Com base em uma matriz associativa em um script Bash, preciso iterar sobre ela para obter a chave e o valor.
#!/bin/bash
declare -A array
array[foo]=bar
array[bar]=foo
Na verdade, eu não entendo como obter a chave enquanto estiver usando um loop for-in.
for i in a,b c_s,d ; do KEY=${i%,*}; VAL=${i#*,}; echo $KEY" XX "$VAL; done
Respostas:
As chaves são acessadas usando um ponto de exclamação:,
${!array[@]}
os valores são acessados usando${array[@]}
.Você pode iterar sobre os pares chave / valor como este:
Observe o uso de aspas ao redor da variável na
for
instrução (mais o uso de em@
vez de*
). Isso é necessário caso alguma chave inclua espaços.A confusão na outra resposta vem do fato de sua pergunta incluir "foo" e "bar" para as chaves e os valores.
fonte
array=(${!hash[@]})
array=("${!hash[@]}")
for i in "${!$1[@]}"
?declare -A aa; aa['A']=a1; aa['B']=b2; aa['C']=c3; foo () { declare -n assoc=$1; for key in "${!assoc[@]}"; do echo "Key: $key; Value: ${assoc[$key]}"; done; }; foo aa
. Consulte o BashFAQ / 006 para obter algumas informações importantes.Você pode acessar as chaves com
${!array[@]}
:Então, é fácil iterar sobre os pares chave / valor:
fonte
Use esta função de ordem superior para evitar a pirâmide da desgraça
exemplo:
fonte
fonte