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 非零值)。它被进一步混淆,因为您引用的代码被分配给要评估的字符串,因此美元符号被转义($
)。
正在查看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 非零值)。它被进一步混淆,因为您引用的代码被分配给要评估的字符串,因此美元符号被转义($
)。