我們在寫shell語句的時候經常會用到*這個符號,可能大家很快會想到的就是正則表達式,但是實際上我們被迷惑了,因爲還有一個術語“通配符”也是跟*有關的,下邊先直接上核心內容,簡單粗暴明瞭。
1、通配符一般常用在文件名上,它是由shell本身來解析的,也就是說的特殊涵義是由shell這個命令解釋器賦予的,比如直接在shell中輸入命令語句:
ls /etc/ht* 查看目錄下以ht開頭的文件
rm -f file* 刪除以file開頭的文件
2、正則表達式一般用在工具軟件(grep、awk、sed等)或者支持正則的語言(javascript、perl、java、c++等)進行字符串處理時,它是有使用它的工具軟件或者是語言的庫模塊來解釋,也就是說正則表達式的使用肯定跟特定的工具軟件或者語言模塊相關,具體的例子就不寫了,太常見了。
所以我們知道在shell命令行以及shell腳本中我們可以用通配符同時也可以用正則表達式,通配符在某些情況下還是很方便的。
下邊主要介紹一下通配符相關的語法:
符號:* (與零個或多個字符匹配,跟正則表達式中含義類似)
符號:? (與任何單個字符匹配,跟正則表達式中含義類似)
符號:[ ] (與[ ]中任何一個字符匹配,跟正則表達式中含義類似)
符號:[!] (與除了[ !]中的字符匹配,跟正則表達式有區別,沒記錯的話正則表達式中用的是^)
下邊介紹一個通配符*很經典的用例:
我們想一次性處理一個目錄下的相關文件
for i in *.txt; do
[ -e "$i" ] || continue #防止沒有任何匹配成功的情況下還執行下邊命令
some command "$i"
done