Zsh ilişkisel dizisindeki anahtarların (veya k / v çiftlerinin) yinelenmesi?


23

Zsh'de, ilişkisel bir dizi üzerinde yineleme yapmak istiyorum. Hem anahtarlara hem de değerlere ihtiyacım var. Ancak, ilişkisel diziyi normalde ( for x in $assoc_array) yinelediğimde , yalnızca değerler elde ederim.

Baktığım tüm örnekler, bir anahtar verildiğinde değerini, ilişkisel bir diziden alabileceğinizi gösteriyor. Benim sorunum başlamak için bir takım anahtarlar almak.

Zsh, ilişkisel bir dizideki anahtarların üzerinden yinelenmeyi destekliyor mu?


Eğer sadece küçük bir listeniz varsa, bu bir seçenek olabilir:for i in a,b c_s,d ; do KEY=${i%,*}; VAL=${i#*,}; echo $KEY" XX "$VAL; done
matematik

Yanıtlar:



30

Sorumu sorduktan sonra aramaya devam ettim ve bu cevabı Unix StackExchange'te buldum :

typeset -A assoc_array
assoc_array=(k1 v1 k2 v2 k3 v3)

for k in "${(@k)assoc_array}"; do
  echo "$k -> $assoc_array[$k]"
done

Çıktı:

k1 -> v1
k2 -> v2
k3 -> v3

1
Bunu yararlı bir şekilde test etmek isteyen herkes için yerleşik olanı deneyin $options. (Bkz. man zshoptions)
mVChr

Anahtar, arr [foo] = baz gibi foo, bar, vb. Artan bir sayı değilse?
Timo
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.