嗨,在我之前的问题中,我清楚地了解了如何在 zsh shell 中使用关联数组。
但是每当我在脚本中触发以下命令时
for KEY in ${!array[@]}
在我的数组中的键之间迭代
我得到一个bad substitution
错误。
甚至echo ${!array[@]}
给出相同的。
注意:array
是我的关联数组的名称
zsh
与 Bash 具有不同的参数替换,这在man zshexpn
. 它支持扩展行为的各种修饰符,这些修饰符放在变量名之前的括号中:${(X)name}
。包含数组键(包括关联数组)的修饰符是k
:${(k)array}
扩展到数组中的键列表,除非键是空字符串,否则将被省略。使用双引号和@
修饰符保留空键。
for x in "${(@k)array}" ; ...
Run Code Online (Sandbox Code Playgroud)
将遍历数组的键array
。
您必须使用"${(@k)array}"
,"${(k)array}"
仅扩展到非空键:
typeset -A array
array=(k1 v1 k2 v2 k3 v3)
for k in "${(@k)array}"; do
printf "%s -> %s\n" "$k" "$array[$k]"
done
Run Code Online (Sandbox Code Playgroud)
然后:
$ zsh test.zsh
k1 -> v1
k2 -> v2
k3 -> v3
Run Code Online (Sandbox Code Playgroud)
您还可以for
用键、值扩展替换循环:
printf '%s -> %s\n' "${(@kv)array}"
Run Code Online (Sandbox Code Playgroud)