Linux Shell程式設計(6)——變數替換
變數的名字是它的值儲存的地方。引用它的值稱為變數替換。
$
讓我們仔細地區別變數和變數的值。如果variable1是一個變數的名字,那麼$variable1就是引用這個變數的值――即這個變數它包含的資料。如果只有變數名出現(即指沒有字首$),那就可能是在1)宣告一個變數或是在給這個變數賦值。2)宣告廢棄這個變數,3)匯出(exported)變數,4)或是在變數指示的是一種訊號的特殊情況。(參考例子 29-5)。變數賦值可以使用等於號(=),比如:var1=27。也可在read命令和在一個迴圈的情況下賦值,比如:for var2 in 1 2 3。
在一個雙引號(" ")裡的變數引用不會禁止變數替換。所以雙引號被稱為部分引用,有時也稱為"弱引用"。而在一個單引號裡(' ')的變數替換是被禁止的,變數名只被解釋為普通的字面意思。所以單引號被稱為"全域性引用",有時也被稱為強引用。從第五章可得到更多的細節討論。.
注意$variable實際上只是${variable}的簡單的簡寫形式。在某些場合使用$variable形式會引起錯誤,這時你可能需要使用${variable}的形式了。
例子變數賦值與替換
$
讓我們仔細地區別變數和變數的值。如果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
相關文章
- Linux Shell程式設計(28)——程式替換Linux程式設計
- Linux Shell程式設計(24)——命令替換Linux程式設計
- Shell轉義字元與變數替換字元變數
- Linux Shell程式設計(10)——引用變數Linux程式設計變數
- Shell程式設計-shell變數1程式設計變數
- Linux Shell程式設計(7)——變數賦值Linux程式設計變數賦值
- Linux Shell程式設計(8)——變數詳解Linux程式設計變數
- Linux Shell程式設計(14)——內部變數Linux程式設計變數
- Shell程式設計-02-Shell變數程式設計變數
- shell程式設計–bash變數程式設計變數
- shell程式設計(一)變數程式設計變數
- shell替換程式碼
- Linux Shell程式設計(9)——特殊變數型別Linux程式設計變數型別
- Shell變數型別有哪些?linux運維shell程式設計變數型別Linux運維程式設計
- shell程式設計-高階變數程式設計變數
- Shell程式設計-04-Shell中變數數值計算程式設計變數
- Shell程式設計-shell變數2-位置變數和預定義變數程式設計變數
- Linux shell程式設計(一)shell指令碼中的變數詳解Linux程式設計指令碼變數
- shell程式設計–bash變數介紹程式設計變數
- Shell程式設計規範與變數程式設計變數
- shell替換程式裡的程式碼
- 【Perl程式設計-6】正規表示式--替換+轉化程式設計
- 網中人“shell十三問之變數替換” 外傳(初學shell必看)(轉)變數
- 01 shell程式設計之變數定義程式設計變數
- 01 shell程式設計規範與變數程式設計變數
- sed處理變數替換變數
- shell程式設計02——變數定義與使用程式設計變數
- SHELL程式設計實現批量Netatalk字符集檔名替換程式設計
- Linux Shell程式設計(13)——數字常量Linux程式設計
- Linux系統程式設計之程式替換:exec 函式族Linux程式設計函式
- Linux Shell程式設計(1)——shell程式設計簡介Linux程式設計
- shell程式設計學習筆記(二):Shell中變數的使用程式設計筆記變數
- shell指令碼程式設計學習筆記——變數指令碼程式設計筆記變數
- shell程式設計之環境變數配置檔案程式設計變數
- Linux Shell變數Linux變數
- linux shell 程式設計Linux程式設計
- linux shell程式設計Linux程式設計
- Oracle中的替換變數,&變數名,&&變數名說明Oracle變數