Skip to content
Vidar Holen edited this page Jul 31, 2023 · 1 revision

Multiple ! in front of pipelines are a bash/ksh extension. Use only 0 or 1.

Problematic code:

#!/bin/sh
! ! true

Correct code:

#!/bin/sh
true

Rationale:

POSIX (and Dash) does not allow multiple ! pipeline negations in a row. It's also logically unnecessary.

Use either zero or one !.

Exceptions:

Scripts whose shebang declares it will run with Ksh and Bash will not trigger this warning.

If you really want to negate multiple times on POSIX or Dash, e.g. to normalize exit codes to 0 or 1, use cmd || false or a command group:

! { ! true; } 

Related resources:

  • Help by adding links to BashFAQ, StackOverflow, man pages, POSIX, etc!

ShellCheck

Each individual ShellCheck warning has its own wiki page like SC1000. Use GitHub Wiki's "Pages" feature above to find a specific one, or see Checks.

Clone this wiki locally