引用符號在解析器中保護特殊元字符和參數擴展,其使用方法有3種:反斜杠(\),單引號(’‘),雙引號(“”)。
單引號和雙引號必須匹配使用,均可在解析器中保護特殊元字符和通配符,但是單引號(硬轉義)主要用於信息的原樣輸出,防止任何變量的擴展,雙引號(軟轉義)允許變量擴展、轉義符和命令替換。單引號保護雙引號,雙引號保護單引號。
1. 反斜杠
反斜杠通過解析器將1個字符轉化為引用符號或轉義。
1)在單引號內使用反斜杠,反斜杠不會被解析,保持原樣輸出。
2)在雙引號內使用反斜杠,主要用於美元符號($),反單引號(``),雙引號(""),單引號('')的輸出,以及轉義符的解析,其中單引號的輸出中,反斜杠和雙引號不能同時使用。
3)不使用單引號和雙引號(如:echo \,輸出為空),則反斜杠可以被看做自動忽略。
2. 單引號
1)單引號內不允許任何變量、元字符、通配符、轉義符的解析,均被原樣輸出。
2)使用雙引號或反斜杠轉義可顯示輸出單引號,但是雙引號和反斜杠不能被同時使用。
如命令:echo “\'”,輸出結果會為(\'),而不是(')
3)可解析正則表達式,與sed和grep命令配合使用
3. 雙引號
保護特殊元字符和通配符不被shell解析,但是允許變量和命令替換,以及轉義符的解析。
4. 附錄
在此順便學習一下linux常見的特殊字符,包括通配符、轉義符和元字符。
4.1 通配符(wildcard)
通配符實際上是一種shell實現的路徑擴展功能,當shell在“參數”中遇到通配符后,會將其當做路徑或文件名在磁盤上搜尋可能的匹配,以下表格中列出了比較常用的shell通配符,以供大家參考和學習。
字符 | 含義 | 實例 |
* | 匹配一個或多個字符 | a*b a與b之間可以有任意長度的字符 |
? | 匹配任意一個字符 | a?b a與b之間必須也只能有一個字符 |
[list] | 匹配list中任意單一字符 | a[xyz]b a與b之間必須也只能有一個[xyz]之間的字符 a[0-9]b a與b之間必須也只能有一個0-9之間的數字字符 a[!0-9]b a與b之間有且只有一個字符,同時字符不能為0-9 |
{string list} | 匹配字符串列表中的任一字符串 | a{abc,xyz,123}b a與b之間只能為abc或xyz或123 |
需要說明的是,通配符與正則表達式語句有些相似,但它與正則表達式不同,只能將其理解為shell特殊字符即可,而且只涉及*,?,[]和{}。
4.2 元字符(Meta)
字符 | 說明 |
; | 命令分隔符,在前一個命令結束時,忽略其返回值,繼續執行下一個命令 |
& | 后台運行命令,最大的好處是無需等待命令執行結束,就可以在同一命令行下繼續輸入命令 |
= | 變量名=值,為變量賦值。注意"="左右緊跟變量名和值,中間不要有空格 |
$ | 變量值替換,"$變量名"替換為shell變量的"值",為避免在文本連接時混淆,請使用${變量名} |
> | 輸出重定向,prog > file 將標准輸出重定向到文件(覆蓋原文件內容) |
>> | 輸出重定向,prog >> file 將標准輸出追加到文件 |
< | 輸入重定向,prog < file 從文件file中獲取標准輸入 |
| | 管道命令,例:p1 | p2 將p1的標准輸出作為p2的標准輸入 |
() | 在子shell中執行命令,或用於運算,或用於命令替換($(command)) |
{} | 在當前shell中執行命令,或用在變量替換的界定范圍(例如上面的${變量名}用法) |
&& | 前一個命令執行成功后,才繼續執行下一個命令。例:p1 && p2 ,若p1執行成功后,才執行p2,反之,不執行p2 |
|| | 前一個命令執行失敗后,才繼續執行下一個命令。例:p1 || p2 ,若p1執行成功后,不執行p2,反之,才執行p2 |
! | 執行歷史記錄(history列表)中的命令,如!1 |
~ | 用戶主目錄 |
4.3 轉義符
shell提供的轉義符有3中:單引號(''),雙引號(""),反斜杠(\)。轉義符已在上述內容中進行了詳細介紹,在此只是對其做一個簡單總結。
字符 | 說明 |
''(單引號) | 硬轉義,其內部所有的shell元字符、通配符等都不會被解析,用於參數的原樣輸出。注意,硬轉義中不允許再出現單引號 |
""(雙引號) | 軟轉義,可用於保護元字符和通配符,但是允許變量和命令替換的擴展,也允許反斜杠轉義符的解析 |
\(反斜杠) | 轉義,保護元字符或通配符不被shell解析,主要用於雙引號,單引號,反單引號和美元符號 |
與echo和sed連用時,常用的反斜杠轉義字符如下表所示:
轉義符 | 意義 |
\a | 響鈴字符 |
\b | 后退符,即刪除前一個字符 |
\c | 輸出不換行,與/n作用相反 |
\d | 以“星期、月、日”表示日期 |
\f | 換行,但光標仍停留在原處 |
\h或\H | 顯示基本主機名或顯示完整的主機名 |
\t或\T | 24小時或12小時制時間 |
\n | 輸出換行 |
\r | 光標移至行首,並且不換行 |
\s | 當前shell的名稱,如bash |
\t | 插入Tab鍵 |
\u | 當前登錄shell的用戶名 |
\v | Bash版本 |
\w | 當前工作目錄 |
\W | 當前工作目錄的基名 |
\\ | 反斜杠\\,有無雙引號,結果相同 |
\$ | 美元符號$,有無雙引號,結果相同 |
\" | 雙引號“,有無雙引號,結果相同 |
\' | 單引號’,不能與雙引號同時使用 |
\` | 反單引號`,有無雙引號,結果相同 |
\nnn | 插入八進制所代表的ASCII字符 |