Created SC2332 (markdown)

Vidar Holen
2025-04-08 11:13:35 -07:00
parent e01a16505c
commit 173fdb2d8b

47
SC2332.md Normal file

@@ -0,0 +1,47 @@
## [ ! -o opt ] is always true because -o becomes logical OR. Use [[ ]] or ! [ -o opt ].
Or "`[ ! -a file ]` is always true because `-a` becomes logical AND. Use `-e` instead."
### Problematic code:
```sh
if [ ! -o braceexpand ]
then
..
fi
```
### Correct code:
```sh
if [[ ! -o braceexpand ]]
then
..
fi
```
or
```sh
if ! [ -o braceexpand ]
then
..
fi
```
### Rationale:
Bash interprets `[ ! -o opt ]` as `[ "!" ] || [ "opt" ]` instead of negating the condition. As a result, the condition is always true.
Avoid this by using `[[ ! -o opt ]]` or `! [ -o opt ]`.
The same issue applies to `[ ! -a file ]`, but this is easier fixed using POSIX standard `[ ! -e file ]`.
### Exceptions:
None.
### Related resources:
* Help by adding links to BashFAQ, StackOverflow, man pages, POSIX, etc!