查找与 zsh 关联数组中的值匹配的键?

Mar*_*eed 4 associative-array zsh

在常规数组中,我可以使用(i)(I)来搜索与给定值匹配的条目的索引(分别从数组的开头或结尾开始的第一个匹配):

list=(foo bar baz)
echo $list[(i)bar]
# => 2
Run Code Online (Sandbox Code Playgroud)

这不适用于关联数组,无法获取找到值的键(之一):

declare -A hash=([foo]=bar [baz]=zoo)
echo $hash[(i)bar]
# => no output 
Run Code Online (Sandbox Code Playgroud)

除了手动循环之外,还有其他机制可以做到这一点吗?

Gai*_*owl 6

下标标志(r)(k)参数标志相结合应该给你你想要的:

declare -A hash=([foo]=bar [baz]=zoo)
echo ${(k)hash[(r)bar]}
# => foo
Run Code Online (Sandbox Code Playgroud)

下标标志的手册页部分(r)只讨论返回值而忽略了这种用法,所以很难找到。