嗨,在我之前的问题中,我清楚地了解了如何在 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)