zsh中的奇怪数组查找

时间:2016-02-06 03:01:41

标签: zsh typeset

查看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)的目的是什么?

1 个答案:

答案 0 :(得分:1)

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

  

(r)标志采用模式并替换匹配数组的第一个元素。

因此,代码片段执行您所描述的内容:查看元素是否在数组中(即查找返回非零值)。它被进一步混淆,因为您引用的代码被分配给要评估的字符串,因此美元符号被转义(\$)。