標籤:
如果運算式中包含特殊字元,Shell 將會進行替換。例如,在雙引號中使用變數就是一種替換,逸出字元也是一種替換。
舉個例子:
- #!/bin/bash
- a=10
- echo -e "Value of a is $a \n"
運行結果:
Value of a is 10
這裡 -e 表示對逸出字元進行替換。如果不使用 -e 選項,將會原樣輸出:
Value of a is 10\n
下面的逸出字元都可以用在 echo 中:
逸出字元 |
含義 |
\\ |
反斜線 |
\a |
警報,響鈴 |
\b |
退格(刪除鍵) |
\f |
換頁(FF),將當前位置移到下頁開頭 |
\n |
換行 |
\r |
斷行符號 |
\t |
水平定位字元(tab鍵) |
\v |
垂直定位字元 |
可以使用 echo 命令的 -E 選項禁止轉義,預設也是不轉義的;使用 -n 選項可以禁止插入分行符號。
命令替換
命令替換是指Shell可以先執行命令,將輸出結果暫時儲存,在適當的地方輸出。
命令替換的文法:
- `command`
注意是反引號,不是單引號,這個鍵位於 Esc 鍵下方。
下面的例子中,將命令執行結果儲存在變數中:
- #!/bin/bash
- DATE=`date`
- echo "Date is $DATE"
- USERS=`who | wc -l`
- echo "Logged in user are $USERS"
- UP=`date ; uptime`
- echo "Uptime is $UP"
運行結果:
Date is Thu Jul 2 03:59:57 MST 2009Logged in user are 1Uptime is Thu Jul 2 03:59:57 MST 200903:59:57 up 20 days, 14:03, 1 user, load avg: 0.13, 0.07, 0.15
變數替換
變數替換可以根據變數的狀態(是否為空白、是否定義等)來改變它的值
可以使用的變數替換形式:
形式 |
說明 |
${var} |
變數本來的值 |
${var:-word} |
如果變數 var 為空白或已被刪除(unset),那麼返回 word,但不改變 var 的值。 |
${var:=word} |
如果變數 var 為空白或已被刪除(unset),那麼返回 word,並將 var 的值設定為 word。 |
${var:?message} |
如果變數 var 為空白或已被刪除(unset),那麼將訊息 message 送到標準錯誤輸出,可以用來檢測變數 var 是否可以被正常賦值。 若此替換出現在Shell指令碼中,那麼指令碼將停止運行。 |
${var:+word} |
如果變數 var 被定義,那麼返回 word,但不改變 var 的值。 |
請看下面的例子:
#!/bin/bashecho ${var:-"Variable is not set"}echo "1 - Value of var is ${var}"echo ${var:="Variable is not set"}echo "2 - Value of var is ${var}"unset varecho ${var:+"This is default value"}echo "3 - Value of var is $var"var="Prefix"echo ${var:+"This is default value"}echo "4 - Value of var is $var"echo ${var:?"Print this message"}echo "5 - Value of var is ${var}"
運行結果:
- Variable is not set
- 1 - Value of var is
- Variable is not set
- 2 - Value of var is Variable is not set
- 3 - Value of var is
- This is default value
- 4 - Value of var is Prefix
- Prefix
- 5 - Value of var is Prefix
【Shell指令碼學習9】Shell替換:Shell變數替換,命令替換,逸出字元