1 SC2324
Vidar Holen edited this page 2023-07-30 16:06:16 -07:00

var+=1 will append, not increment. Use (( var += 1 )), declare -i var, or quote number to silence.

Problematic code:

var=2 n=3
var+=$n

Correct code:

In bash/ksh, use an (( arithmetic context ))

(( var += n ))

or declare the variable as an integer type:

declare -i var=2
n=4
var+=$n

For POSIX sh, use an $((arithmetic expansion)):

var=$((var+n))

Rationale:

The problematic code attempts to add 2 and 3 to get 5.

Instead, += on a string variable will concatenate, so the result is 23.

Exceptions:

If you do want to concatenate a number, for example to append trailing zeroes, you can silence the warning by quoting the number:

var+="000"
  • Help by adding links to BashFAQ, StackOverflow, man pages, POSIX, etc!