apakah ada cara untuk mendaftar semua 'indeks ID' (kunci) pada variabel array asosiatif bash?


26

Saya punya array ini:

declare -A astr

Saya menambahkan elemen ke dalamnya:

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

Tapi nanti saya perlu tahu apa ID indeks (elemA dan elemB) dan daftar mereka.

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

Jawaban:


35

Anda bisa mendapatkan daftar "kunci" untuk array asosiatif seperti:

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

Anda dapat beralih di atas "kunci" seperti:

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

Contoh

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

Referensi


1
Saya baru saja menemukannya juga berfungsi untuk array yang diindeks secara numerik juga: astr2=(a b c d e);echo ${!astr2[@]};unset astr2[2];echo ${!astr2[@]}thx!
Aquarius Power

@AquariusPower - Ya jika Anda memutar kembali suntingan pada jawaban saya, Anda akan melihat bahwa saya awalnya menyertakan indeks numerik juga, tetapi kemudian membuangnya karena Anda ingin memberi nama hash.
slm

Catatan yang ${!var[index]}tidak berfungsi, hanya ${!var[@]}atau ${!var[*]}lakukan :(
i336_

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

Maaf, klarifikasi: Saya mencoba menentukan kunci asosiatif untuk indeks numerik n . Saya menyadari bahwa saya dapat dengan mudah melakukannya keys=(${!var[@]})dan kemudian ${keys[n]}memberi saya indeks, tetapi pada saat yang sama saya juga menyadari bahwa saya perlu memikirkan kembali pendekatan saya.
i336_
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.