4.3. Bash 变量是无类型的
优质
小牛编辑
136浏览
2023-12-01
不同与许多其他的编程语言,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 不会帮你检查。