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

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

在 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"引号作为键的一部分。

答案1

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

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

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

取消密钥更困难

答案2

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

dict+=('apple count' 1)

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

dict+=(['apple count']=1 ['orange count']=3)

相关内容