Grep 为什么有必要将表达式置于引号(或dblquotes)中

Grep 为什么有必要将表达式置于引号(或dblquotes)中,grep,Grep,像这样变大的时候 cat .bashrc | grep '\.b' # .bashrc Grep返回正确的数据,但是为什么需要这些引号呢?因为\字符是shell特有的,如果您想将\传递给Grep,您需要包装或转义\,这样shell就不会对\进行正常解释 当您键入一行文本时,它首先进入shell,shell对其进行解析,提取命令名和参数、特殊命令和管道、重定向和变量以及各种内容。一旦shell对您键入的内容进行了所有解释和转换,它就会运行找到的命令和找到的参数 在本例中,您希望使用参数\.b运行

像这样变大的时候

cat .bashrc | grep '\.b'
# .bashrc

Grep返回正确的数据,但是为什么需要这些引号呢?

因为
\
字符是shell特有的,如果您想将
\
传递给Grep,您需要包装或转义
\
,这样shell就不会对
\
进行正常解释

当您键入一行文本时,它首先进入shell,shell对其进行解析,提取命令名和参数、特殊命令和管道、重定向和变量以及各种内容。一旦shell对您键入的内容进行了所有解释和转换,它就会运行找到的命令和找到的参数


在本例中,您希望使用参数
\.b
运行命令
grep
\
告诉grep匹配可选的
,而不是任何字符。但是,如果您只是键入
\.b
作为参数,shell会将
\
解释为“忽略下一个字符的任何特殊含义”,并将参数
.b
传递给
grep
。因此,您需要转义
\
,以便shell不会这样做。您可以使用引号(就像您所做的那样)或另一个
\
——如果您输入
grep\\.b
,那么第一个
\
将转义第二个
\
,它将
\.b
传递给grep。

您不应该执行该命令,而应该执行
grep-F'.b'.bashrc
。获取Chris Johnson的书“Shell脚本编写方法”。