zsh:如何使用$+命令测试zsh上是否存在两个程序



在zsh中,我们可以使用以下方法来测试进度图的存在:

(( $+commands[program] )) && program

我的问题是:如何使用commands来测试两个程序而不是一个程序的存在?

man 1 zshparam中的Subscript Flags下发现(删除部分,添加强调(:

r如果给出该标志,则exp被视为模式

ir一样,

I类似于i,但给出了最后一个匹配的索引,或关联数组中所有可能的匹配键On failure将0或空字符串替换为关联数组当测试不存在的值或键时,此标志最好

因此,要同时测试program1program2,可以执行以下操作:

(( $#commands[(I)(program1|program2)] == 2 ))

我想您可以使用以下内容:

if ((( $+commands[program1] ) && ( $+commands[program2] ))); then
echo 'both command exists'
fi

使用bash:也可以做到这一点

if [[ `command -v program1` && `command -v program2`]]; then
echo 'both command exists'
fi

我找到了一种解决这个问题的方法:

alias rm='echo use trash instead!'
(( $+commands[trash] && $+commands[gio] )) && alias trash='gio trash'

我仍然想知道是否有可能使用这样的东西:

(( $+commands[program1 program2] ))

最新更新