$
/ ${}
with arithmetic variable SH-200411 echo "0" > $numPath/num
12fi
13num=`cat $numPath/num`
14num=$(($num + 1))15echo $num > $numPath/num
16
17name="$numPath/message_$num.eml"
11 echo "0" > $numPath/num
12fi
13num=`cat $numPath/num`
14num=$(($num + 1))15echo $num > $numPath/num
16
17name="$numPath/message_$num.eml"
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%-}
.
echo $(($n + ${arr[i]}))
echo $((n + arr[i]))