zsh 中奇怪的数组查找

Strange array lookup in zsh

正在查看this example from pyenv-virtualenv

typeset -g -a precmd_functions
if [[ -z $precmd_functions[(r)_pyenv_virtualenv_hook] ]]; then
  precmd_functions=(_pyenv_virtualenv_hook $precmd_functions);
fi

_pyenv_virtualenv_hook 是一个 declared earlier in the file.

的函数

我相信这段代码正在检查 _pyenv_virtualenv_hook 是否已经注入 precmd_functions,但我不明白语法。

数组查找中(r)的用途是什么?

Zsh Guide Chapter on Substitutions解释了(r)标志:

The (r) flag takes a pattern and substitutes the first element of the array matched.

因此该代码段按照您的描述进行操作:查看元素是否在数组中(即查找 returns 非零值)。它被进一步混淆,因为您引用的代码被分配给要评估的字符串,因此美元符号被转义($)。