Skip to content
koalaman edited this page Oct 14, 2015 · 4 revisions

Numerical -eq does not dereference in [..]. Expand or use string operator.

Problematic code:

read -r n
if [ n -lt 0 ]
then
   echo "bad input"
fi

Correct code:

read -r n
if [ "$n" -lt 0 ]
then
   echo "bad input"
fi

Rationale:

You are comparing a string value with a numerical operator, such as -eq, -ne, -lt or -gt.

In [[ .. ]], this would automatically dereference the string, looking to see if there are variables by that name.

In [ .. ], which you are using, the string is just treated as an invalid number.

If you want to compare numbers, expand yourself (e.g. use $var instead of var). If you are trying to compare strings and not numbers, use =, != \< or \> instead.

Exceptions:

None.

ShellCheck

Each individual ShellCheck warning has its own wiki page like SC1000. Use GitHub Wiki's "Pages" feature above to find a specific one, or see Checks.

Clone this wiki locally