shell中的替換
阿新 • • 發佈:2020-09-02
Shell替換:Shell變數替換,命令替換,轉義字元
轉義字元
如果表示式中包含特殊字元,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 的值。 |
請看下面的例子:
#變數空就為空,變數有值就覆蓋,不賦值
[root@hass-11 ~]# unset a
[root@hass-11 ~]# echo ${a:+9}
[root@hass-11 ~]# echo $a
[root@hass-11 ~]# a=1
[root@hass-11 ~]# echo ${a:+9}
9
#變數為空就覆蓋,變數有值就有值,不賦值
[root@hass-11 ~]# unset a
[root@hass-11 ~]# echo ${a:-9}
9
[root@hass-11 ~]# echo $a
[root@hass-11 ~]# a=1
[root@hass-11 ~]# echo ${a:-9}
1
#變數為空就覆蓋,變數有值就有值,賦值
[root@hass-11 ~]# unset a
[root@hass-11 ~]# echo ${a:=9}
9
[root@hass-11 ~]# echo $a
9
[root@hass-11 ~]# echo ${a:=10}
9
#變數為空就覆蓋,變數有值就有值,不賦值
[root@hass-11 ~]# unset a
[root@hass-11 ~]# echo ${a:?9}
-bash: a: 9
[root@hass-11 ~]# echo $a
[root@hass-11 ~]# a=1
[root@hass-11 ~]# echo ${a:?9}
1