Shell

Shell

Made by DeepSource

Unnecessary use of $ / ${} with arithmetic variable SH-2004

Anti-pattern
Critical

Use of $ or ${..} on regular variables in arithmetic context is unnecessary, and can even lead to subtle bugs. This is because the content of $((..)) is first expanded into a string, and then evaluated as an expression:

$ a='1+1'
$ echo $(($a * 5))    # becomes 1+1*5
6
$ echo $((a * 5))     # evaluates as (1+1)*5
10

The $ is unavoidable for special variables like $1 vs 1, $# vs #. It is also required when adding modifiers to parameters expansions, like ${#var} or ${var%-}.

Problematic code:

echo $(($n + ${arr[i]}))

Preferred code:

echo $((n + arr[i]))