SC2070 – ShellCheck Wiki

See this page on GitHub

Sitemap


-n doesn't work with unquoted arguments. Quote or use [[ ]].

Problematic code:

if [ -n $var ]
then
  echo "var has a value"
else
  echo "var is empty"
fi

Correct code:

In POSIX:

if [ -n "$var" ]
then
  echo "var has a value"
else
  echo "var is empty"
fi

In bash/ksh:

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 quote the variable, or (if your shell supports it) use [[ -n $var ]] which generally has fewer caveats than [.

Exceptions:

None


ShellCheck is a static analysis tool for shell scripts. This page is part of its documentation.