O shell Bourne, de onde essa sintaxe vem, não tem um operador de negação de comando ( !
). Então, enquanto isso não era tanto um problema para if
onde você poderia usar:
if cmd; then
: no-op
else
something if cmd returns false
fi
Isso é mais um problema com while
, onde você precisa fazer coisas feias como:
while cmd; [ "$?" -ne 0 ]; do
...
done
Isso parece melhor:
until cmd; do
...
done
Com ksh
(e POSIX sh
que também adotou (e bash / zsh ...)), você pode fazer:
if ! cmd; then
something if cmd fails
fi
while ! cmd; do
...
done
Embora você perca o valor exato do status de saída no processo.