Created SC2070 (markdown)

koalaman
2015-05-14 14:28:03 -07:00
parent c90dd3c948
commit f713d18cd3

46
SC2070.md Normal file

@@ -0,0 +1,46 @@
## Always true because you failed to quote. Use [[ ]] instead.
### Problematic code:
if [ -n $var ]
then
echo "var has a value"
else
echo "var is empty"
fi
### Correct code:
In bash/ksh:
if [[ -n $var ]]
then
echo "var has a value"
else
echo "var is empty"
fi
In POSIX:
if [ -n "$var" ]
then
echo "var has a value"
else
echo "var is empty"
fi
### Rationale:
When `$var` is unquoted, a blank value will cause it to wordsplit and disappear. If `$var` is empty, these two statements are identical:
[ -n $var ]
[ -n ]
`[ string ]` is shorthand for testing if a string is empty. This is still true if `string` happens to be `-n`. `[ -n ]` is therefore true, and by extension so is `[ -n $var ]`.
To fix this, either use `[[ -n $var ]]` which has fewer caveats than `[`, or quote the variable.
### Exceptions:
None