带有`-file name`的GNU grep给出了错误`ile name:没有这样的文件或目录`

带有`-file name`的GNU grep给出了错误`ile name:没有这样的文件或目录`,grep,Grep,当我试图找到pattern'-file name'时,我收到了奇怪的错误消息 jaewan@lymose1:~$ grep -file-name README.txt grep: ile-name: No such file or directory jaewan@lymose1:~$ grep \-file-name README.txt grep: ile-name: No such file or directory jaewan@lymose1:~$ grep '-file-name

当我试图找到pattern'-file name'时,我收到了奇怪的错误消息

jaewan@lymose1:~$ grep -file-name README.txt 
grep: ile-name: No such file or directory
jaewan@lymose1:~$ grep \-file-name README.txt 
grep: ile-name: No such file or directory
jaewan@lymose1:~$ grep '-file-name' README.txt 
grep: ile-name: No such file or directory
jaewan@lymose1:~$ grep '\-file-name' README.txt 
-- works well
我认为如果我不使用“-file name”,grep会将“-file name”解释为-f文件名。 我阅读了有关grep和正则表达式的文档,但找不到原因。 乍一看,在我看来,文件名也应该起作用

这是GNU grep bug吗?还是普通的linux风格


GNU grep版本是2.5.4

在模式之前使用
-e
,以防止将其解释为选项

   -e PATTERN, --regexp=PATTERN
          Use PATTERN as the pattern; useful to protect patterns beginning
          with -.
因此,您的代码应该是:

grep -e -file-name README.txt 

您的转义尝试只到达shell,而不是
grep
,这就是为什么您没有看到任何更改的行为。

这是标准的POSIX参数处理。有两种解决方法:

grep -e -file-name README.txt
grep -- -file-name README.txt

第一个参数将下一个参数标记为正则表达式,即使它看起来像一个选项;第二个选项关闭选项解析,因此
--
之后的任何内容都将被视为参数而不是选项。

谢谢您的友好回答:D
   -e PATTERN, --regexp=PATTERN
          Use PATTERN as the pattern; useful to protect patterns beginning
          with -.