Created SC2325 (markdown)

Vidar Holen
2023-07-30 19:39:58 -07:00
parent 3685488d3d
commit 6ae77c59ce

34
SC2325.md Normal file

@@ -0,0 +1,34 @@
## Multiple ! in front of pipelines are a bash/ksh extension. Use only 0 or 1.
### Problematic code:
```sh
#!/bin/sh
! ! true
```
### Correct code:
```sh
#!/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:
```sh
! { ! true; }
```
### Related resources:
* Help by adding links to BashFAQ, StackOverflow, man pages, POSIX, etc!