grep 減號不起作用

grep 減號不起作用

我想找到包含-2.

使用ls | grep "-2"退貨usage: grep...

使用單引號而不是雙引號會傳回相同的結果,並且完全不使用引號,而搜尋其他任何內容都會正確傳回符合的檔案名稱。

我記得-這不是正規表示式特殊字元。

請不要關注查找具有名稱的文件的特定問題。我主要想了解為什麼 grep 會這樣。

在 macOS 10.13 上使用 bash

答案1

就像它將 -2 解釋為命令列參數一樣,無論它是否用引號引起來。

grep 不知道參數是否用引號引起來。

許多解析步驟是由 shell 本身在執行任何操作之前執行的-應用>重定向、$擴展變數、*擴展通配符、|將管道拆分為一組單獨的命令,並將每個命令拆分為一個單字數組。

因此,無論您運行grep -2grep '-2'grep \-2,甚至x=-2; grep $x,shell 仍然會將其視為相同的參數清單:{ grep, -2}。這是將傳遞給 execv() 系統呼叫的內容,也是grep程式將在其argv[]數組中接收,無論原始引用如何。


1即使在 Windows 上,CreateProcess() 中的命令列只是一個字串,大多數連接埠grep仍然會有這種行為,因為 C 運行時庫在初始化期間執行相同的參數分割。

相關內容