bash Shell本身不支援正規表達式,使用正規表達式的是Shell指令和工具,如grep、sed、awk等;
但是,bash Shell可以使用正規表達式中的一些元字元實作通配(Globbing)功能,通配是把一個包含通配符的非具體檔案名擴充存儲在計算機
伺服器或者網絡上的一批具有檔案名的過程。
最常用的通配符包括正規表達式元字元: ? * [ ] { } ^等。這些元字元在通配中的意義與正規表達式中的意義不完全一緻;
"*": 不表示其前面字元的重複, 而是表示任意位的任意字元;
"?": 表示一個任意字元
"^": 不代表行首, 而是代表取反;
"[]": 特殊情況,該符好與正規表達式中相同;
“{ }”: 表示一組表達式的集合;
示例:
[a-h]*.awk : 表示以a~h範圍内以字母開頭并以.awk結尾的檔案;
[a-h]*.[^awk]* : 表示a~h範圍内以字母開頭不以awk結尾的檔案;注意:"*"必不可少,否則句号僅比對到一個字元;
{[a-h]*.[^awk]* , o?.pem}: 表示滿足[a-h]*.[^awk]* 或者 o?.pem 的所有檔案;
說明:通配的結果有計算機搜尋大量的檔案或者目錄進行比對而輸出, 通配對處理能力和記憶體資源有很高的要求。
黑客輸入包含通配符的檔案名故意讓伺服器重複和連續不斷地進行通配可能引起的拒絕服務攻擊;是以,大型伺服器經常
通過限制伺服器執行通配功能的次數、限制一個具體使用者每次輸入的通配符或者如果通配符太普通,則拒絕執行通配等方式來提高伺服器的安全性;