Yes, if you care about the exit code of the compound statement. Try the following:
#! /bin/sh -
! $1"$@" || true
echo $"$?"
$1"$@" && true
echo $"$?"
then run it with true and false as arguments.
./script true
0
0
./script false
0
1
This is because short-circuit evaluation of boolean expressions.
In OP's example, let's suppose the file doesn't exist:
- In the first case, the first condition returns TRUE, no need to evaluate the second operation (
TRUE OR x = TRUE). You get a TRUE for the compound statement. - In the second case, the first condition returns FALSE, no need to evaluate the second operation (
FALSE AND x = FALSE). You get a FALSE for the compound statement.
Exit codes are very important. Check What does set -e mean in a bash script? to see possible implications of set -e, trap and set -o pipefail.