
- Unix/Linux 初學者指南
- Unix/Linux - 首頁
- Unix/Linux - 什麼是 Linux?
- Unix/Linux - 入門指南
- Unix/Linux - 檔案管理
- Unix/Linux - 目錄
- Unix/Linux - 檔案許可權
- Unix/Linux - 環境
- Unix/Linux - 基本實用程式
- Unix/Linux - 管道與過濾器
- Unix/Linux - 程序
- Unix/Linux - 通訊
- Unix/Linux - vi 編輯器
- Unix/Linux Shell 程式設計
- Unix/Linux - Shell 指令碼
- Unix/Linux - 什麼是 Shell?
- Unix/Linux - 使用變數
- Unix/Linux - 特殊變數
- Unix/Linux - 使用陣列
- Unix/Linux - 基本運算子
- Unix/Linux - 決策
- Unix/Linux - Shell 迴圈
- Unix/Linux - 迴圈控制
- Unix/Linux - Shell 替換
- Unix/Linux - 引用機制
- Unix/Linux - I/O 重定向
- Unix/Linux - Shell 函式
- Unix/Linux - 手冊頁幫助
- 高階 Unix/Linux
- Unix/Linux - 標準 I/O 流
- Unix/Linux - 檔案連結
- Unix/Linux - 正則表示式
- Unix/Linux - 檔案系統基礎
- Unix/Linux - 使用者管理
- Unix/Linux - 系統性能
- Unix/Linux - 系統日誌
- Unix/Linux - 訊號和陷阱
Unix/Linux - Shell 引用機制
在本章中,我們將詳細討論 Shell 引用機制。我們將從討論元字元開始。
元字元
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
現在讓我們嘗試使用引用的字元:-
#!/bin/sh echo Hello\; Word
執行後,您將收到以下結果:-
Hello; Word
$ 符號是元字元之一,因此必須對其進行引用以避免 Shell 的特殊處理:-
#!/bin/sh echo "I have \$1200"
執行後,您將收到以下結果:-
I have $1200
下表列出了四種引用形式:-
序號 | 引用和描述 |
---|---|
1 |
單引號 這些引號之間的所有特殊字元都失去了其特殊含義。 |
2 |
雙引號 這些引號之間的大多數特殊字元都失去了其特殊含義,但以下例外:-
|
3 |
反斜槓 反斜槓後面的任何字元都將失去其特殊含義。 |
4 |
反引號 反引號之間的任何內容都將被視為命令並執行。 |
單引號
考慮一個包含許多 Shell 特殊字元的 echo 命令:-
echo <-$1500.**>; (update?) [y|n]
在每個特殊字元前面加上反斜槓既繁瑣又使行難以閱讀:-
echo \<-\$1500.\*\*\>\; \(update\?\) \[y\|n\]
有一種簡單的方法可以引用大量字元。在字串的開頭和結尾加上單引號('):-
echo '<-$1500.**>; (update?) [y|n]'
單引號內的字元就像每個字元前面都有一個反斜槓一樣被引用。這樣,echo 命令就可以以正確的方式顯示。
如果在要輸出的字串中出現單引號,則不應將整個字串放在單引號內,而應使用反斜槓(\)在前面加上它,如下所示:-
echo 'It\'s Shell Programming
雙引號
嘗試執行以下 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) ]
雙引號消除了除以下字元之外的所有字元的特殊含義:-
$ 用於引數替換
反引號用於命令替換
\$ 用於啟用文字美元符號
\` 用於啟用文字反引號
\" 用於啟用嵌入式雙引號
\\ 用於啟用嵌入式反斜槓
所有其他\ 字元都是文字(非特殊)
單引號內的字元就像每個字元前面都有一個反斜槓一樣被引用。這有助於 echo 命令正確顯示。
如果在要輸出的字串中出現單引號,則不應將整個字串放在單引號內,而應使用反斜槓(\)在前面加上它,如下所示:-
echo 'It\'s Shell Programming'
反引號
將任何 Shell 命令放在反引號之間會執行該命令。
語法
以下是將任何 Shell 命令放在反引號之間的簡單語法:-
var=`command`
示例
在以下示例中,date 命令被執行,產生的結果儲存在 DATA 變數中。
DATE=`date` echo "Current Date: $DATE"
執行後,您將收到以下結果:-
Current Date: Thu Jul 2 05:28:45 MST 2009