Shell替換:Shell變量替換,命令替換,轉義字符


如果表達式中包含特殊字符,Shell 將會進行替換。例如,在雙引號中使用變量就是一種替換,轉義字符也是一種替換。

舉個例子:

  1. #!/bin/bash
  2. a=10
  3. 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可以先執行命令,將輸出結果暫時保存,在適當的地方輸出。

命令替換的語法:

  1. `command`

注意是反引號,不是單引號,這個鍵位於 Esc 鍵下方。

下面的例子中,將命令執行結果保存在變量中:

  1. #!/bin/bash
  2. DATE=`date`
  3. echo "Date is $DATE"
  4. USERS=`who | wc -l`
  5. echo "Logged in user are $USERS"
  6. UP=`date ; uptime`
  7. 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 的值。


請看下面的例子:

 1 #!/bin/bash
 2 
 3 echo ${var:-"Variable is not set"}
 4 echo "1 - Value of var is ${var}"
 5 
 6 echo ${var:="Variable is not set"}
 7 echo "2 - Value of var is ${var}"
 8 
 9 unset var
10 echo ${var:+"This is default value"}
11 echo "3 - Value of var is $var"
12 
13 var="Prefix"
14 echo ${var:+"This is default value"}
15 echo "4 - Value of var is $var"
16 
17 echo ${var:?"Print this message"}
18 echo "5 - Value of var is ${var}"

 

運行結果:

  1. Variable is not set
  2. 1 - Value of var is
  3. Variable is not set
  4. 2 - Value of var is Variable is not set
  5. 3 - Value of var is
  6. This is default value
  7. 4 - Value of var is Prefix
  8. Prefix
  9. 5 - Value of var is Prefix


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM