W3Cschool
恭喜您成為首批注冊用戶
獲得88經驗值獎勵
UNIX Shell 提供有特殊意義的各種元字符,同時利用他們在任何 Shell 腳本,并導致終止一個字,除了引用。
舉個例子,在列出文件中的目錄時 ? 匹配一個一元字符,并且 * 匹配多個字符。下面是一個 Shell 特殊字符(也稱為元字符)的列表:
* ? [ ] ' " \ $ ; & ( ) | ^ < > new-line space tab
在一個字符前使用 \ ,它可能被引用(例如,代表它自己)。
下面的例子,顯示了如何打印 * 或 ? :
#!/bin/sh
echo Hello; Word
這將產生下面的結果。
Hello
./test.sh: line 2: Word: command not found
shell returned 127
現(xiàn)在,讓我們嘗試使用引用字符:
#!/bin/sh
echo Hello\; Word
這將產生以下結果:
Hello; Word
$ 符號是一個元字符,所以它必須被引用,以避免被 Shell 特殊處理:
#!/bin/sh
echo "I have \$1200"
這將產生以下結果:
I have $1200
是以下四種形式的引用:
Quoting | Description |
---|---|
單引號 | 所有在這些引號之間的特殊字符會失去它們特殊的意義 |
雙引號 | 所有在這些引號之間的特殊字符會失去它們特殊的意義除了以下字符: - $ - ` - \$ - \' - \" -\\ |
反斜杠 | 任何直接跟在反斜杠后的字符會失去它們特殊的意義 |
反引號 | 所有在這些引號之間的特殊字符會被當做命令而被執(zhí)行 |
考慮包含許多特殊的 Shell 字符的 echo 命令:
echo <-$1500.**>; (update?) [y|n]
在每個特殊字符前加反斜杠會顯得異常繁瑣,并且不容易閱讀:
echo \<-\$1500.\*\*\>\; \(update\?\) \[y\|n\]
有一個簡單的方法來引用一大組字符。將一個單引號(')放在字符串的開頭和結尾:
echo '<-$1500.**>; (update?) [y|n]'
單引號內的任何字符被引用正如每個字符前均加上一個反斜杠。所以,現(xiàn)在這個 echo 命令將正確地顯示。
如果要輸出的一個字符串內出現(xiàn)一個單引號,你不應該把整個字符串置于單引號內,相反你應該在單引號前使用反斜杠(\)如下:
echo 'It\'s Shell Programming'
嘗試執(zhí)行以下 Shell 腳本。這個 Shell 腳本使用了單引號:
VAR=ZARA
echo '$VAR owes <-$1500.**>; [ as of (`date +%m/%d`) ]'
這將輸出以下結果:
$VAR owes <-$1500.**>; [ as of (`date +%m/%d`) ]
所以這不是你想顯示的內容。很明顯,單引號防止變量替換。如果想替換的變量值和如預期那樣使引號起作用,那么就需要把命令放置在雙引號內,如下:
VAR=ZARA
echo "$VAR owes <-\$1500.**>; [ as of (`date +%m/%d`) ]"
這將產生以下結果:
ZARA owes <-$1500.**>; [ as of (07/02) ]
除以下字符外,雙引號使所有字符的失去特殊含義:
單引號內的任何字符被引用正如每個字符前均加上一個反斜杠。所以,現(xiàn)在這個 echo 命令將正確地顯示。
如果要輸出的字符串內出現(xiàn)一個單引號,你不應該把整個字符串置于單引號內,相反你應該在單引號前使用反斜杠(\)如下:
echo 'It\'s Shell Programming'
置于反引號之間的任何 Shell 命令將執(zhí)行命令
下面是一個簡單的語法,把任何 Shell 命令置于反引號之間:
var=`command`
下面將執(zhí)行 date 命令,產生的結果將被存儲在 DATA 變量中。
DATE=`date`
echo "Current Date: $DATE"
這將輸出以下結果:
Current Date: Thu Jul 2 05:28:45 MST 2009
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: