Chapter 15. Arithmetic Expansion

Arithmetic expansion provides a powerful tool for performing arithmetic operations in scripts. Translating a string into a numerical expression is relatively straightforward using backticks, double parentheses, or let.

Variations

Arithmetic expansion with backticks (often used in conjunction with expr)

   1 z=`expr $z + 3`          # The 'expr' command performs the expansion.

Arithmetic expansion with double parentheses, and using let

The use of backticks in arithmetic expansion has been superseded by double parentheses -- ((...)) and $((...)) -- and also by the very convenient let construction.

   1 z=$(($z+3))
   2 z=$((z+3))                                  #  Also correct.
   3                                             #  Within double parentheses,
   4                                             #+ parameter dereferencing
   5                                             #+ is optional.
   6 
   7 # $((EXPRESSION)) is arithmetic expansion.  #  Not to be confused with
   8                                             #+ command substitution.
   9 
  10 
  11 
  12 # You may also use operations within double parentheses without assignment.
  13 
  14   n=0
  15   echo "n = $n"                             # n = 0
  16 
  17   (( n += 1 ))                              # Increment.
  18 # (( $n += 1 )) is incorrect!
  19   echo "n = $n"                             # n = 1
  20 
  21 
  22 let z=z+3
  23 let "z += 3"  #  Quotes permit the use of spaces.
  24               #  The 'let' operator actually performs arithmetic evaluation,
  25               #+ rather than expansion.

Examples of arithmetic expansion in scripts:

  1. Example 12-9

  2. Example 10-14

  3. Example 26-1

  4. Example 26-11

  5. Example A-17