c'è un modo per elencare tutti gli "ID degli indici" (chiavi) su una variabile di matrice associativa bash?


26

Ho questo array:

declare -A astr

Aggiungo elementi ad esso:

astr[elemA]=123
astr[elemB]=199

Ma in seguito ho bisogno di sapere quali sono gli ID degli indici (elemA ed elemB) ed elencarli.

echo "${astr[@]}" #this only get me the values...

Risposte:


35

È possibile ottenere l'elenco di "chiavi" per l'array associativo in questo modo:

$ echo "${!astr[@]}"
elemB elemA

Puoi scorrere le "chiavi" in questo modo:

for i in "${!astr[@]}"
do   
  echo "key  : $i"
  echo "value: ${astr[$i]}"
done

Esempio

$ for i in "${!astr[@]}"; do echo "key  : $i"; echo "value: ${astr[$i]}"; done
key  : elemB
value: 199
key  : elemA
value: 123

Riferimenti


1
Ho appena scoperto che funziona anche con array indicizzati numericamente: grazie astr2=(a b c d e);echo ${!astr2[@]};unset astr2[2];echo ${!astr2[@]}!
Aquarius Power il

@AquariusPower - Sì, se ripristini le modifiche sulla mia risposta, vedrai che avevo originariamente incluso anche l'indice numerico, ma poi l'ho lasciato cadere perché volevi hash con nome.
slm

Nota che ${!var[index]}non funziona, solo ${!var[@]}o ${!var[*]}non funziona :(
i336_

@ i336_ - estrai !così ${var[index]}. tldp.org/LDP/abs/html/arrays.html
slm

Spiacenti, chiarimento: stavo cercando di determinare la chiave associativa per l'indice numerico n . Mi sono reso conto che posso fare facilmente keys=(${!var[@]})e poi ${keys[n]}, dandomi l'indice, ma nello stesso tempo ho anche capito che dovevo ripensare il mio approccio.
i336_
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.