1 SC1106
Vidar Holen edited this page 2021-04-09 10:19:09 -07:00

In arithmetic contexts, use < instead of -lt

Similarly, > instead of -gt, <= instead of -le, >= instead of -ge, == instead of -eq, != instead of -ne.

Problematic code:

if (( 2 -lt 3 ))
then
  echo "True"
fi

Correct code:

if (( 2 < 3 ))
then
  echo "True"
fi

Rationale:

The comparators -lt, -ge, -eq and friends are flags for the test command aka [. You are instead using it in an arithmetic context, such as (( .. )) or $(( .. )), where you should be using <, >=, == etc instead.

In arithmetic contexts, -lt is simply interpreted as "subtract the value of $lt", which is clearly not the intention.

Exceptions:

If you do want to subtract $lt you can add a space to make this clear to ShellCheck: echo $((3 - lt))

  • Help by adding links to BashFAQ, StackOverflow, man pages, POSIX, etc!