在使用shell命令對多個文件對象執行單一操作時,例如刪除當前目錄下的file1到file8,多次使用相同的命令rm file1到rm file8非常麻煩,通常使用通配符模式解決這個問題:rm file[1-8]。
當使用通配符指定一種模式時,該模式與底層系統上的一個或多個文件匹配,shell以空格隔開的所有匹配對象的列表來替換該模式;當模式不能找到匹配對象時,shell將不理會參數、通配符等,保留原樣。例如,當ls -d /etc/g*不能找到/etc/g*的任何文件時,就會報錯。
*
--------代表任意個字符,但不會匹配以.開始的文件名
?
--------代表一個字符
\
--------轉義字符,可將通配符或者特殊字符還原成一般字符
[abc]
--------匹配[]里面的某個字符
[a-z]
--------匹配a到z之間的某個字符,還能寫成[A-Z]、[0-9]、[A-Za-z]等
[!abc]
--------匹配任意不包含在[!]里的字符,同樣包括[!a-z]等的用法,這里[和!之間不能有空格
{c1,c2}
--------同c1或者c2相匹配,其中c1和c2也是通配符,比如{[0-9]abc,[efg]}與[0-9]abc、[efg]均通配
;
--------連續性命令,比如command1;command2,不管前者是否正確,后者都會執行,使用&&和||則會有先后順序
!
--------邏輯運算中的非
/
--------路徑字符
$
--------讀取變量字符,例如echo $PATH
>,>>
--------輸出導向,分別為清空與末尾累加
'
--------單引號
"
--------雙引號
``
--------兩個`中間為可以先執行的指令,例如cat /etc/`pwd`/hello.
注意:
使用[]時,[與]之間絕對不能為空,所以[][*]表示[、]與*任意一個字符來匹配,如果要處理與通配符相關的字符,需要使用轉義字符\,例如:
echo $[abc]
輸出結果是a、b或者c變量的值。
echo $\[abc\]
輸出結果是[abc]變量的值(舉例而已,當然不存在[abc]這樣的變量名)。
echo '[abc]'
單引號也能起到與轉義字符同樣的作用。雙引號內部保留所有通配符的原義,而單引號內部將通配符視為普通字符。