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