Uma solução alternativa e uma abordagem mais agradável, considerando o que você está fazendo neste caso, é evitar o uso de which
totalmente, assim:
if (( $+commands[foobar] ))
# configure foobar
fi
Como isso funciona?
De zshexpn(1)
:
${+name}
If name is the name of a set parameter '1' is substituted, otherwise '0' is substituted.
$commands
é uma matriz associativa gerenciada por zsh (também a hash
builtin) que consiste em nomes de comandos como chaves e seu caminho associado como um valor.
Portanto, usar a expansão ${+name}
na tabela de hash $commands
, indexada pelo comando que você deseja testar para a existência, oferece uma maneira barata e rápida de fazer essa verificação.
Por fim, a construção (( expr ))
é uma avaliação aritmética, pois a expansão ${+name}
retorna 0 ou 1.