Обходной путь и все вокруг более хороший подход, учитывая то, что вы делаете в этом случае, состоит в том, чтобы which
полностью исключить использование, например так:
if (( $+commands[foobar] )) # configure foobar fi
Как это работает?
От zshexpn(1)
:
$ +
Если name является именем набора параметров, подставляется «1», в противном случае «0» подставляется.
$commands
является ассоциативным массивом, который управляется zsh (также hash
встроенным), состоящим из имен команд в качестве ключей и их связанного пути в качестве значения.
Таким образом, использование ${+name}
расширения в $commands
хэш-таблице, индексируемой командой, которую вы хотите проверить на наличие, дает вам дешевый и быстрый способ выполнить эту проверку.
Наконец, (( expr ))
конструкция является арифметической оценкой, поскольку ${+name}
расширение возвращает либо 0, либо 1.