Shell為什麼
為什麼 grep fil*
會失敗?
我發現
echo file|grep fil*
失敗了,但是echo abcd|grep abc*
成功了。沒看懂,誰能解釋一下?
你的例子有兩個問題。
第一個是您假設正則表達式的工作方式與glob 模式相同,因為它
*
是萬用字元,意思是“任何字元序列”。在正則表達式中,*
表示“任意數量的前一個原子”,因此fil*
表示f
後跟i
零個或多個l
字元。您需要說grep fil.*
才能獲得預期的含義:.
表示“任何單個字元,因此.*
表示“任何字元序列”。較小的問題是您使用了未加引號的特殊字元,這些字元在 glob 規則下意味著某些東西,這意味著 shell 可以解釋它們。如果本地目錄中有任何文件匹配 glob 模式
fil*
或abc*
,shell 將擴展它們,因此grep
會將擴展的文件名作為模式獲取,而不是預期的 RE。每當你在命令行上使用這些字元時,你應該引用它們:echo file | grep 'fil.*'
.