-
Notifications
You must be signed in to change notification settings - Fork 1.8k
SC2251
set -e
! false
set -e
{ ! false; }
ShellCheck has found a command inverted with !
that may have no effect. In particular, it does not appear as a condition in an if
statement or while
loop, or as the final command in a script or function.
The most common reason for this is thinking that it'll trigger set -e
aka errexit
if a command succeeds, as in the example. This is not the case: !
will inhibit errexit both on success and failure of the inverted command.
Wrapping such an inverted command in a brace group will trigger errexit
as expected, since the brace group will act as a standalone command with the same exit code.
ShellCheck will not detect cases where $?
is implicitly or explicitly used to check the value afterwards:
check_success() { [ $? -eq 0 ] || exit 1; }
! false; check_success
! true; check_success
In this case, you can ignore the warning, or optionally wrap them in { ! false; }
.