You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Vidar Holen edited this page Oct 4, 2015
·
6 revisions
Always true because you failed to quote. Use instead.
Problematic code:
if [ -n$var ]
thenecho"var has a value"elseecho"var is empty"fi
Correct code:
In bash/ksh:
if [[ -n$var ]]
thenecho"var has a value"elseecho"var is empty"fi
In POSIX:
if [ -n"$var" ]
thenecho"var has a value"elseecho"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.