萬用字元是由shell處理的(不是由所涉及到命令語句處理的,其實我們在shell各個命令中也沒有發現有這些萬用字元介紹), 它只會出現在命令的「引數」裡(它不用在命令名稱裡,也不用在操作符上)。當shell在「引數」中遇到了萬用字元時,shell會將其當作路徑或檔名去在磁碟上搜尋可能的匹配:若符合要求的匹配存在,則進行替換(路徑擴充套件);否則就將該萬用字元作為乙個普通字元傳遞給「命令」,然後再由命令進行處理。
總之,萬用字元實際上就是一種shell實現的路徑擴充套件功能。在萬用字元被處理後, shell會先完成該命令的重組,然後再繼續處理重組後的命令,直至執行該命令。
例如以下命令:[root@localhost wildcard]# ls
a.htm b.htm
[root@localhost wildcard]# ls *.htm
a.htm b.htm
[root@localhost wildcard]# ls d*.htm
ls: d*.htm: 沒有那個檔案或目錄分析如下:
第2個命令中,對於引數*.htm,shell在當前目錄下能搜尋到相匹配檔案,會換成a.htm b.htm。實際執行的是ls a.htm b.htm命令。
第3個命令,對於引數d*.htm, shell在當前目錄找不到相匹配的檔案,則直接將d*.htm作為ls引數,實際執行的是ls d*.htm。由於找不到該檔案,所以會出現:沒有那個檔案或目錄。
了解了shell萬用字元,我們現在看下,shell常見萬用字元有那一些了。
shell萬用字元
字元含義
例項
* 匹配0或多個字元
a*b a與b之間可以有任意長度的任意字元, 也可以乙個也沒有, 如aabcb, a01b, ab等
? 匹配任意乙個字元
a?b a與b之間有且只有乙個字元, 可以是任意字元, 如aab, adb, a0b等
[list]
匹配list中的任意單一字元
a[xyz]b a與b之間有且只有乙個字元, 且只能是x或y或z, 如: axb, ayb, azb。
[!list]
匹配除list中的任意單一字元
a[!0-9]b a與b之間有且只有乙個字元, 但不能是數字, 如axb, aab, a-b等
[c1-c2]
匹配c1-c2中的任意單一字元
a[0-9]b a與b之間有且只有乙個字元,該字元是0-9之間的數字,如a0b, a1b,... ,a9b。
匹配 sring1 或 string2 (或更多)其一字串
ab a與b之間只能是abc或xyz或123這三個字串之一。
需要說明的是:萬用字元看起來有點象正規表示式語句,但是它與正規表示式不同的,不能相互混淆。把萬用字元理解為shell特殊代號字元就可。
shell除了有萬用字元之外,由shell負責預先先解析後,將處理結果傳給命令列之外,shell還有一系列自己的其他特殊字元。
shell元字元
字元說明
= 變數名=值,為變數賦值。注意=左右緊跟變數名和值,中間不要有空格
$ 變數值替換,$變數名替換為shell變數的值;為避免在文字連線時混淆,請使用$;$0...$9 代表shell檔案的引數。
>
prog > file 將標準輸出重定向到檔案。
>>
prog >> file 將標準輸出追加到檔案。
<
prog < file 從檔案file中獲取標準輸入
| 管道命令,例:p1 | p2 將p1的標準輸出作為p2的標準輸入
& 後台執行命令,最大好處是無需等待命令執行結束,就可以在同一命令列下繼續輸入命令
() 在子shell中執行命令
{} 在當前shell中執行命令,或用在變數替換的界定範圍(例如上面的$用法)。
; 命令結束符。例如p1;p2表示先執行p1,再執行p2
&& 前乙個命令執行成功後,才繼續執行下乙個命令。例:p1 && p2 ;若p1執行成功後,才執行p2,反之,不執行p2;
|| 前乙個命令執行失敗後,才繼續執行下乙個命令。例:p1 || p2 ;若p1執行成功後,不執行p2,反之,才執行p2;
! 執行歷史記錄中的命令
~ home目錄
有時候,我們想讓萬用字元,或者元字元變成普通字元。那麼這裡我們就需要用到轉義符了。 shell提供轉義符有三種。
shell轉義字元
字元說明
'' 單引號,硬轉義,其內部所有的shell元字元、萬用字元都會被關掉。注意,硬轉義中不允許出現』(單引號)。
"" 雙引號,軟轉義,其內部只允許出現特定的shell元字元($,`,\):$用於變數值替換、`用於命令替換、\用於轉義單個字元
\ 反斜槓,轉義,去除其後緊跟的元字元或萬用字元的特殊意義。
mysql sql 轉義符 MySQL的轉義字元
mysql可以識別下列轉義字元 0乙個ascii 0 nul 字元。n乙個新行符。t乙個定位符。r乙個回車符。b乙個退格符。乙個單引號 符。乙個雙引號 符。乙個反斜線 符。乙個 符。它用於在正文中搜尋 的文字例項,否則這裡 將解釋為乙個萬用字元。乙個 符。它用於在正文中搜尋 的文字例項,否則這裡 將...
Linux Shell 萬用字元 元字元 轉義符使用
shell常見萬用字元 字元含義例項 匹配 0 或多個字元 a b a與b之間可以有任意長度的任意字元,也可以乙個也沒有,如aabcb,axyzb,a012b,ab。匹配任意乙個字元 a?b a與b之間必須也只能有乙個字元,可以是任意字元,如aab,abb,acb,a0b。list 匹配 list ...
使用linux shell命令時小心轉義符號
shell命令1 grep tmp 1這個命令比較簡單,就是把 tmp 1檔案中包含空格的行列出來。如果我們想先ssh到某台機器上再執行這個shell命令1,你也許會嘗試 ssh 127.0.0.1 grep tmp 1但是很快你會發現行不通。因為ssh拿到的 之後,兩個引號就消失了,然後傳遞給gr...