Linux Shell程式設計(6)——變數替換

尹成發表於2014-09-30
變數的名字是它的值儲存的地方。引用它的值稱為變數替換。


$
讓我們仔細地區別變數和變數的值。如果variable1是一個變數的名字,那麼$variable1就是引用這個變數的值――即這個變數它包含的資料。如果只有變數名出現(即指沒有字首$),那就可能是在1)宣告一個變數或是在給這個變數賦值。2)宣告廢棄這個變數,3)匯出(exported)變數,4)或是在變數指示的是一種訊號的特殊情況。(參考例子 29-5)。變數賦值可以使用等於號(=),比如:var1=27。也可在read命令和在一個迴圈的情況下賦值,比如:for var2 in 1 2 3。


在一個雙引號(" ")裡的變數引用不會禁止變數替換。所以雙引號被稱為部分引用,有時也稱為"弱引用"。而在一個單引號裡(' ')的變數替換是被禁止的,變數名只被解釋為普通的字面意思。所以單引號被稱為"全域性引用",有時也被稱為強引用。從第五章可得到更多的細節討論。.


注意$variable實際上只是${variable}的簡單的簡寫形式。在某些場合使用$variable形式會引起錯誤,這時你可能需要使用${variable}的形式了。


例子變數賦值與替換


#!/bin/bash


# Variables: 賦值和替換


a=375
hello=$a


#-------------------------------------------------------------------------
# =號的左右兩邊都不能有空白符.
# 如果有一個空白符會怎麼樣?


#  如果用 "VARIABLE =value",
#              ^
#+ 指令碼會以為"VARIABLE"是一個命令並且此命令帶了一個引數"=value"。


#  如果用 "VARIABLE= value",
#                 ^
#+ 指令碼會以為"value"是一個命令,
#+ 並且把環境變數"VARIABLE"賦為空值:""。
#-------------------------------------------------------------------------




echo hello    # 沒有引用變數,只是輸出字串 "hello".


echo $hello
echo ${hello} # 這句和上面的一句一樣


echo "$hello"
echo "${hello}"


echo


hello="A B  C   D"
echo $hello   # A B C D
echo "$hello" # A B  C   D
# 正如你所看到的:echo $hello和echo "$hello"產生不同的輸出。
#                                  ^      ^
# 把變數引起來會保留空白字元.


echo


echo '$hello'  # $hello
#    ^      ^
#  在單引號中的變數引用會被禁止,
#+ 字元"$"會僅僅被認為是一個普通的字元,而不是變數的字首.


# 注意不同引用的不同效果.




hello=    # Setting it to a null value.
echo "\$hello (null value) = $hello"
#  注意具有null值的變數不等同於廢棄(unset)此變數
#+ 雖然最後的結果都是一樣的(看下面的).


# --------------------------------------------------------------


#  在同一行裡用空白字元隔開為多個變數賦值是可以的。
#
#  警告:這可能減少可讀性,並且可能是不可移植的。


var1=21  var2=22  var3=$V3
echo
echo "var1=$var1   var2=$var2   var3=$var3"


# 在老版本的sh中這可能會引起問題


# --------------------------------------------------------------


echo; echo


numbers="one two three"
#           ^   ^
other_numbers="1 2 3"
#               ^ ^
#  如果給變數賦的值中有空白字元,引號是必須的。
#
echo "numbers = $numbers"
echo "other_numbers = $other_numbers"   # other_numbers = 1 2 3
echo


echo "uninitialized_variable = $uninitialized_variable"
# 未初始化的變數具有null值 (即是沒有值).
uninitialized_variable=   #  宣告,但沒有初始化它 --
                          #+ 這就好像上面一樣給它設定一個null 值
echo "uninitialized_variable = $uninitialized_variable"
                          # 它仍然是null值.


uninitialized_variable=23       # 賦值
unset uninitialized_variable    # 銷燬變數.
echo "uninitialized_variable = $uninitialized_variable"
                                # 結果仍然是null值.
echo


exit 0


相關文章