mirror of
https://github.com/koalaman/shellcheck.git
synced 2025-10-03 19:29:44 +08:00
Created SC2325 (markdown)
34
SC2325.md
Normal file
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!
|
Reference in New Issue
Block a user