Chapter 15. 算术扩展

算术扩展提供了一种强力的工具, 可以在脚本中执行(整型)算法操作. 可以使用backticks, double parentheses, 或 let来将字符串转换为数字表达式.

一些变化

使用反引号的算术扩展(通常都是和expr一起使用)

   1 z=`expr $z + 3`          # 'expr'命令将会执行这个扩展.

使用双括号, 和let形式的算术扩展

反引号形式的算术扩展已经被双括号形式所替代了 -- ((...))$((...)) -- 当然也可以使用非常方便的let形式.

   1 z=$(($z+3))
   2 z=$((z+3))                                  #  也正确.
   3                                             #  使用双括号的形式,
   4                                             #+ 参数解引用
   5                                             #+ 是可选的.
   6 
   7 # $((EXPRESSION)) is arithmetic expansion.  #  不要与命令
   8                                             #+ 替换相混淆.
   9 
  10 
  11 
  12 # 使用双括号的形式也可以不用给变量赋值.
  13 
  14   n=0
  15   echo "n = $n"                             # n = 0
  16 
  17   (( n += 1 ))                              # 递增.
  18 # (( $n += 1 )) is incorrect!
  19   echo "n = $n"                             # n = 1
  20 
  21 
  22 let z=z+3
  23 let "z += 3"  #  使用引用的形式, 允许在变量赋值的时候存在空格.
  24               #  'let'操作事实上执行得的是算术赋值,
  25               #+ 而不是算术扩展.

下边是一些在脚本中使用算术扩展的例子:

  1. Example 12-9

  2. Example 10-14

  3. Example 26-1

  4. Example 26-11

  5. Example A-17