grep 减号不起作用

grep 减号不起作用

我想查找包含的目录中的所有文件-2

使用ls | grep "-2"回报usage: grep...

使用单引号代替双引号会返回相同的结果,并且根本不使用引号,而正确搜索其他任何内容都会返回匹配的文件名。

我记得-这不是一个正则表达式特殊字符。

请不要关注查找具有名称的文件的具体问题。我主要想了解 grep 的行为方式。

在 macOS 10.13 上使用 bash

答案1

这就像将 -2 解释为命令行参数,不管它是否被引号引起来。

grep 不知道参数是否用引号括起来。

在执行任何操作之前,许多解析步骤都是由 shell 本身1>执行的 -应用重定向、$扩展变量、*扩展通配符、|将管道拆分为一组单独的命令,并将每个命令拆分为一个单词数组。

因此,无论您运行grep -2grep '-2'grep \-2还是x=-2; grep $x,shell 仍会将其视为相同的参数列表:{ grep, -2}。这就是将传递给 execv() 系统调用的内容,也是grep程序将在其argv[]数组中接收,无论原始引用如何。


1即使在 Windows 上,CreateProcess() 中的命令行只是一个字符串,但grep仍然会有这种行为,因为 C 运行时库在初始化期间执行相同的参数拆分。

相关内容