mirror of
https://github.com/koalaman/shellcheck.git
synced 2025-10-03 19:29:44 +08:00
Created SC2244 (markdown)
46
SC2244.md
Normal file
46
SC2244.md
Normal file
@@ -0,0 +1,46 @@
|
|||||||
|
## Prefer explicit -n to check non-empty string (or use =/-ne to check boolean/integer).
|
||||||
|
|
||||||
|
### Problematic code:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
if [ "$1" ]
|
||||||
|
then
|
||||||
|
echo "True"
|
||||||
|
fi
|
||||||
|
```
|
||||||
|
|
||||||
|
### Correct code:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
# Check if $1 is empty or non-empty
|
||||||
|
if [ -n "$1" ]
|
||||||
|
then
|
||||||
|
echo "True, $1 is a non-empty value"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Check instead if $1 is true or false, as in Java
|
||||||
|
[ "$1" = "true" ]
|
||||||
|
|
||||||
|
# Check instead if $1 is non-zero or zero, as in C
|
||||||
|
[ "$1" -ne 0 ]
|
||||||
|
|
||||||
|
# Check instead if $1 is defined (even if just assigned the empty string) or undefined
|
||||||
|
[ "${1+x}" = "x" ]
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
### Rationale:
|
||||||
|
|
||||||
|
`[ "$var" ]` is equivalent to `[ -n "$var" ]` and checks whether the string is non-empty.
|
||||||
|
|
||||||
|
Users more familiar with other languages are therefore often surprised to learn that `[ "$var" ]` is true when `var=false` or `var=0`.
|
||||||
|
|
||||||
|
Adding the explicit `-n` helps clarify that this is a string comparison, and not related to any concept of boolean values or comparisons as it is in most languages.
|
||||||
|
|
||||||
|
### Exceptions:
|
||||||
|
|
||||||
|
If you are familiar with the semantics of `[`, you can [[ignore]] this suggestion with no ill effects.
|
||||||
|
|
||||||
|
### Related resources:
|
||||||
|
|
||||||
|
* Help by adding links to BashFAQ, StackOverflow, man pages, POSIX, etc!
|
Reference in New Issue
Block a user