在zsh中,我们可以使用以下方法来测试进度图的存在:
(( $+commands[program] )) && program
我的问题是:如何使用commands
来测试两个程序而不是一个程序的存在?
在man 1 zshparam
中的Subscript Flags
下发现(删除部分,添加强调(:
r
如果给出该标志,则exp
被视为模式
i
与r
一样,
I
类似于i
,但给出了最后一个匹配的索引,或关联数组中所有可能的匹配键On failure将0或空字符串替换为关联数组当测试不存在的值或键时,此标志最好
因此,要同时测试program1
和program2
,可以执行以下操作:
(( $#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] ))