概括描述shell特殊字符用于模式匹配
學(xué)習(xí)特殊字符時(shí),你可能會(huì)遇到shell特殊字符問(wèn)題,以社區(qū)支持的方式開(kāi)發(fā)Linux發(fā)行版Fedora Core Linux,而Red Hat公司原來(lái)Red Hat Linux的開(kāi)發(fā)團(tuán)隊(duì)也將繼續(xù)參與這一發(fā)行版本的開(kāi)發(fā)工作。這里將介紹shell特殊字符問(wèn)題的解決方法,在這里拿出來(lái)和大家分享一下。
shell特殊字符
shell特殊字符 中除使用普通字符外,還可以使用一些具有特殊含義和功能的特殊字符。在使用它們時(shí)應(yīng)注意其特殊的含義和作用范圍。下面分別對(duì)這些特殊字符加以介紹。
通配符
通配符用于模式匹配,如文件名匹配、路經(jīng)名搜索、字符串查找等。常用的通配符有*、?和括在方括號(hào)[ ]中的字符序列。用戶可以在作為命令參數(shù)的文件名中包含這些通配符,構(gòu)成一個(gè)所謂的“模式串”,在執(zhí)行過(guò)程中進(jìn)行模式匹配。代表任何字符串(長(zhǎng)度可以不等),例如:“f*”匹配以f打頭的任意字符串。但應(yīng)注意,文件名前的圓點(diǎn)(.)和路經(jīng)名中的斜線(/)必須顯式匹配。例如“*”不能匹配.file,而“.*”才可以匹配.file。
代表任何單個(gè)字符。
[] 代表指定的一個(gè)shell特殊字符范圍,只要文件名中[ ]位置處的字符在[ ]中指定的范圍之內(nèi),那么這個(gè)文件名就與這個(gè)模式串匹配。方括號(hào)中的字符范圍可以由直接給出的字符組成,也可以由表示限定范圍的起始字符、終止字符及中間的連字符(-)組成。例如,f [a- d] 與f [abcd]的作用相同。Shell將把與命令行中指定的模式串相匹配的所有文件名都作為命令的參數(shù),形成最終的命令,然后再執(zhí)行這個(gè)命令。
下面我們給出表10-1說(shuō)明這些通配符的具體含義。 表10-1 通配符含義舉例 模式串意義
當(dāng)前目錄下所有文件的名稱。
*Text*
當(dāng)前目錄下所有文件名中包含有Text的文件的名稱。
[ab-dm]*
當(dāng)前目錄下所有以a、b、c、d、m開(kāi)頭的文件的名稱。
[ab-dm]?
當(dāng)前目錄下所有以a、b、c、d、m開(kāi)頭且后面只跟有一個(gè)shell特殊字符的文件的名稱。
/usr/bin/??
目錄/usr/bin下所有名稱為兩個(gè)字符的文件的名稱。
特別需要注意的是,連字符“-”僅在方括號(hào)內(nèi)有效,表示字符范圍,如在方括號(hào)外面就成為普通字符了。而*和?只在方括號(hào)外面是通配符,若出現(xiàn)在方括號(hào)之內(nèi),它們也失去通配符的能力,成為普通字符了。例如,模式“- a[*?]abc”中只有一對(duì)方括號(hào)是通配符,*和?均為普通字符,因此,它匹配的字符串只能是- a*abc和- a?abc。
***說(shuō)明一下使用通配符時(shí)需要注意的一些問(wèn)題。由于*、?和[ ]對(duì)于shell來(lái)說(shuō)具有比較特殊的意義,因此在正常的文件名中不應(yīng)出現(xiàn)這些字符。特別是在目錄名中不要出現(xiàn)它們,否則shell特殊字符匹配起來(lái)可能會(huì)無(wú)窮的遞歸下去。另外要注意的一點(diǎn)是:如果目錄中沒(méi)有與指定的模式串相匹配的文件名,那么shell特殊字符將使用此模式串本身作為參數(shù)傳給有關(guān)命令。這可能就是命令中出現(xiàn)特殊字符的原因所在。
【編輯推薦】