我在 bash 中运行以下命令:
echo "#fastq-dump SRR3105676 --gzip -O my &" | egrep "-O"
我得到
grep: invalid option -- 'O'
Usage: grep [OPTION]... PATTERNS [FILE]...
Try 'grep --help' for more information.
我知道要解决此问题,我需要转义引号中的连字符(破折号),但为什么会发生这种情况?为什么 shell 将“-O”解释为选项而不是正则表达式?
shell不解释任何东西 - 它只是传递
-O
(在引号删除之后)给可执行文件,可执行文件将grep
其解析为其参数向量的一部分argv[]
您可以使用信号结束选项
--
或(对于
grep
具体的情况)使用-e
选项(或其长格式--regexp
)明确告诉它下一个参数是一个表达式:来自
man grep
: