Created SC3062 (markdown)

Vidar Holen
2025-04-08 11:09:44 -07:00
parent d36797bd0e
commit e01a16505c

42
SC3062.md Normal file

@@ -0,0 +1,42 @@
## In POSIX sh, unary -o to check options is undefined.
### Problematic code:
```sh
if [ -o braceexpand ]
then
echo "Brace expansion available and enabled."
fi
```
### Correct code:
`$-` will be set to a list of shell options:
```sh
case $- of
*B*) echo "Brace expansion available and enabled."
esac
```
However, not all options are available through `$-`. If you need to check those, ignore this suggestion with a directive:
```sh
# shellcheck disable=SC3062
if [ -n "$BASH_VERSION" ] && [ -o pipefail ]
then
echo "This is bash and pipefail is enabled."
fi
```
### Rationale:
`[ -o option ]` is a bash/ksh extension, while `$-` is standard POSIX. Do note that letters outside the POSIX set are not guaranteed to be compatible, such as `B` above.
### Exceptions:
As described.
### Related resources:
* Help by adding links to BashFAQ, StackOverflow, man pages, POSIX, etc!