在 Zsh 中的关联数组中设置带空格的键

Fra*_* Yu 5 zsh associative-array

在 Bash(4 或更高版本)中,如果我有一个关联数组dict,我可以设置它的值,dict[apple count]=1并且我可以使用${dict[apple count]}. Zsh 是否允许键名中有空格?dict[apple count]=1在 Zsh 中不起作用,所以我猜 Zsh 对此有不同的语法。dict["apple count"]=1不做我想做的事;它不是apple count用作键,而是使用"apple count"引号作为键的一部分。

Fra*_* Yu 5

一种(丑陋的)解决方法是使用语法“将元素附加到普通数组”,例如

dict+=('apple count' 1)
Run Code Online (Sandbox Code Playgroud)

Zsh 将维护关联数组的属性(只要您将其声明为 1),因此如果dict['apple count']存在,它将更新该值。自 Zsh 5.5 以来,一种不那么丑陋的方式是:

dict+=(['apple count']=1 ['orange count']=3)
Run Code Online (Sandbox Code Playgroud)


Gil*_*il' 5

Zsh 允许任意字符串作为键。问题出在解析器上。

要设置任意键,可以使用变量。

typeset -A dict
key='apple count'; dict[$key]=1
key=']'; dict[$key]=2
key=''; dict[$key]=3
printf %s\\n "${(k@)dict}"
Run Code Online (Sandbox Code Playgroud)

取消密钥更加困难。