czy istnieje sposób na wyświetlenie wszystkich „identyfikatorów indeksów” (kluczy) w zmiennej tablicy asocjacyjnej bash?


26

Mam tę tablicę:

declare -A astr

Dodaję do niego elementy:

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

Ale później muszę wiedzieć, jakie są identyfikatory indeksów (elemA i elemB) i wymienić je.

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

Odpowiedzi:


35

Możesz uzyskać listę „kluczy” dla tablicy asocjacyjnej w następujący sposób:

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

Możesz iterować po „kluczach” w następujący sposób:

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

Przykład

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

Referencje


1
Właśnie odkryłem, że działa również dla tablic indeksowanych numerycznie: astr2=(a b c d e);echo ${!astr2[@]};unset astr2[2];echo ${!astr2[@]}thx!
Aquarius Power,

@AquariusPower - Tak, jeśli cofniesz zmiany w mojej odpowiedzi, zobaczysz, że pierwotnie również załączyłem indeks numeryczny, ale potem go upuściłem, ponieważ chciałeś nazwanych skrótów.
slm

Zauważ, że ${!var[index]}to nie działa, tylko ${!var[@]}lub ${!var[*]}rób :(
i336_

@ i336_ - !wyjmij to, więc to ${var[index]}. tldp.org/LDP/abs/html/arrays.html
slm

Przepraszamy, wyjaśnienie: Próbowałem ustalić klucz asocjacyjny dla indeksu liczbowego n . Uświadomiłem sobie, że mogę to zrobić łatwo, keys=(${!var[@]})a potem ${keys[n]}, dając mi indeks, ale mniej więcej w tym samym czasie zdałem sobie sprawę, że muszę przemyśleć swoje podejście.
i336_
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.