Sim, se você se importa com o código de saída da declaração composta . Tente o seguinte:
#/bin/sh
! $1 || true
echo $?
$1 && true
echo $?
execute-o com true
e false
como argumentos.
./script true
0
0
./script false
0
1
Isso ocorre porque avaliação de curto-circuito das expressões booleanas.
No exemplo do OP, vamos supor que o arquivo não exista :
- No primeiro caso, a primeira condição retorna TRUE, não é necessário avaliar a segunda operação (
TRUE OR x = TRUE
). Você obtém uma VERDADEIRA para a declaração composta. - No segundo caso, a primeira condição retorna FALSE, não é necessário avaliar a segunda operação (
FALSE AND x = FALSE
). Você recebe um FALSE para a declaração composta.
Os códigos de saída são muito importantes. Verifique esta resposta SO para ver possíveis implicações de set -e
, trap
e set -o pipefail
.