如果表達式中包含特殊字符,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 2009
Logged in user are 1
Uptime is Thu Jul 2 03:59:57 MST 2009
03: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/bash
echo ${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 var
echo ${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