mainnet
mainnet copied to clipboard
Unnecessary use of $ / ${} with arithmetic variable - Critical anti-pattern
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]))
You can find $/${} is unnecessary on arithmetic variables here:
/mainnet/blob/main/shentu-2.2/statesync/state_sync.sh#L13-L13