我在 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”解释为选项而不是正则表达式?
答案1
这壳不解释任何东西 - 它只是传递-O
(在删除引号之后)给grep
可执行文件,可执行文件将其作为参数向量的一部分进行解析argv[]
您可以使用以下方式来结束选项--
echo "#fastq-dump SRR3105676 --gzip -O my &" | egrep -- "-O"
或者(针对具体的情况grep
)使用-e
选项(或其长格式--regexp
)明确地告诉它下一个参数是埃表达式:
echo "#fastq-dump SRR3105676 --gzip -O my &" | egrep -e "-O"
从man grep
:
-e PATTERN, --regexp=PATTERN
Use PATTERN as the pattern. If this option is used multiple
times or is combined with the -f (--file) option, search for all
patterns given. This option can be used to protect a pattern
beginning with “-”.