4.3. Bash变量是无类型的

不同与许多其他的编程语言,Bash不以"类型"来区分变量。本质上来说,Bash变量是字符串,但是根据环境的不同,Bash允许变量有整数计算和比较。其中的决定因素是变量的值是不是只含有数字.


例子 4-4. 整数还是字符串?

   1 #!/bin/bash
   2 # int-or-string.sh: Integer or string?
   3 
   4 a=2334                   # 整数.
   5 let "a += 1"
   6 echo "a = $a "           # a = 2335
   7 echo                     # 仍然是整数.
   8 
   9 
  10 b=${a/23/BB}             # 把变量a中的"23"替换为"BB"并赋给变量b
  11                          # 这使变量$b成为字符串
  12 echo "b = $b"            # b = BB35
  13 declare -i b             # 即使明确地声明它是整数也没有用
  14 echo "b = $b"            # b = BB35
  15 
  16 let "b += 1"             # BB35 + 1 =
  17 echo "b = $b"            # b = 1
  18 echo
  19 
  20 c=BB34
  21 echo "c = $c"            # c = BB34
  22 d=${c/BB/23}             # 把"BB"替换成"23"
  23                          # 这使变量$d成为一个整数
  24 echo "d = $d"            # d = 2334
  25 let "d += 1"             # 2334 + 1 =
  26 echo "d = $d"            # d = 2335
  27 echo
  28 
  29 # What about null variables?
  30 e=""
  31 echo "e = $e"            # e =
  32 let "e += 1"             # 数值计算允许有null值操作?
  33 echo "e = $e"            # e = 1
  34 echo                     # 空值(null)变量变成了整数
  35 
  36 # 如果没有声明变量会怎么样?
  37 echo "f = $f"            # f =
  38 let "f += 1"             # 算术计算能通过吗?
  39 echo "f = $f"            # f = 1
  40 echo                     # 没有预先声明的变量变为整数
  41 
  42 
  43 
  44 # 在Bash中的变量确实是无类型的.
  45 
  46 exit 0

变量没有类型既是幸运的也是悲惨的。它使脚本编程时有更多的弹性(但也可能把你弄晕)并能很容易地写出代码。但是,这也很容易不小心犯错误和养成坏的编程习惯。

程序员的负担就是要清楚地知道脚本中变量的类型。Bash不会帮你检查。