linux shell轉義符 元字元 萬用字元 特殊字元匯總,shell轉義
一、linux shell萬用字元(wildcard)
萬用字元是由shell處理的(不是由所涉及到命令語句處理的,其實我們在shell各個命令中也沒有發現有這些萬用字元介紹), 它只會出現在命令的“參數”裡(它不用在命令名稱裡,也不用在操作符上)。當shell在“參數”中遇到了萬用字元時,shell會將其當作路徑或檔案名稱去在磁碟上搜尋可能的匹配:若符合要求的匹配存在,則進行替換(路徑擴充);否則就將該萬用字元作為一個一般字元傳遞給“命令”,然後再由命令進行處理。
總之,萬用字元實際上就是一種shell實現的路徑擴充功能。在萬用字元被處理後, shell會先完成該命令的重組,然後再繼續處理重組後的命令,直至執行該命令。
例如以下命令:
[root@localhost wildcard]# lsa.htm b.htm[root@localhost wildcard]# ls *.htma.htm b.htm[root@localhost wildcard]# ls d*.htmls: 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。 |
{string1,string2,...} |
匹配 sring1 或 string2 (或更多)其一字串 |
a{abc,xyz,123}b a與b之間只能是abc或xyz或123這三個字串之一。 |
需要說明的是:萬用字元看起來有點象Regex語句,但是它與Regex不同的,不能相互混淆。把萬用字元理解為shell特殊代號字元就可。
二、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元字元、萬用字元都會被關掉。注意,硬轉義中不允許出現’(單引號)。 |
"" |
雙引號,軟轉義,其內部只允許出現特定的shell元字元($,`,\):$用於變數值替換、`用於命令替換、\用於轉義單個字元 |
\ |
反斜線,轉義,去除其後緊跟的元字元或萬用字元的特殊意義。 |
linux下怎區分萬用字元*與元字元*
用逸出字元\
怎使用shell轉義符 轉義一個變數值裡面的特殊符號?
shell指令碼取參數應該是用位置參數如 $1 來取的吧。
給 argv[1] 賦值的時候,用單引號包含起來,裡面的特殊字元就不會被解析。
如:
argv[1]='$1$La/Bc.iR$fB0SWwvBL.6G.AS9aIqm40'
b=`echo ${argv[1]}| awk -F "," '{print $2}'`
試試。