Linux Shell程式設計(8)——變數詳解

尹成發表於2014-09-30
不同與許多其他的程式語言,Bash不以"型別"來區分變數。本質上來說,Bash變數是字串,但是根據環境的不同,Bash允許變數有整數計算和比較。其中的決定因素是變數的值是不是隻含有數字.
變數沒有型別既是幸運的也是悲慘的。它使指令碼程式設計時有更多的彈性(但也可能把你弄暈)並能很容易地寫出程式碼。但是,這也很容易不小心犯錯誤和養成壞的程式設計習慣。


程式設計師的負擔就是要清楚地知道指令碼中變數的型別。Bash不會幫你檢查。

例子 
#!/bin/bash


a=2334                   # 整數.
let "a += 1"
echo "a = $a "           # a = 2335
echo                     # 仍然是整數.




b=${a/23/BB}             # 把變數a中的"23"替換為"BB"並賦給變數b
                         # 這使變數$b成為字串
echo "b = $b"            # b = BB35
declare -i b             # 即使明確地宣告它是整數也沒有用
echo "b = $b"            # b = BB35


let "b += 1"             # BB35 + 1 =
echo "b = $b"            # b = 1
echo


c=BB34
echo "c = $c"            # c = BB34
d=${c/BB/23}             # 把"BB"替換成"23"
                         # 這使變數$d成為一個整數
echo "d = $d"            # d = 2334
let "d += 1"             # 2334 + 1 =
echo "d = $d"            # d = 2335
echo


# What about null variables?
e=""
echo "e = $e"            # e =
let "e += 1"             # 數值計算允許有null值操作?
echo "e = $e"            # e = 1
echo                     # 空值(null)變數變成了整數


# 如果沒有宣告變數會怎麼樣?
echo "f = $f"            # f =
let "f += 1"             # 算術計算能通過嗎?
echo "f = $f"            # f = 1
echo                     # 沒有預先宣告的變數變為整數






# 在Bash中的變數確實是無型別的.


exit 0





相關文章