Skip to content

Files

Latest commit

 

History

History
33 lines (22 loc) · 832 Bytes

SC2004.md

File metadata and controls

33 lines (22 loc) · 832 Bytes

Pattern: Unnecessary $/${} on arithmetic variable

Issue: -

Description

The $ on regular variables in arithmetic contexts is unnecessary, and can even lead to subtle bugs. This is because the contents 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's also required when adding modifiers to parameters expansions, like ${#var} or ${var%-}. ShellCheck does not warn about these cases.

Example of incorrect code:

echo $(($n+1))

Example of correct code:

echo $((n+1))

Further Reading