grep'\ $'和grep“ \ $”有什么区别?
有人可以对以下命令给出正确的解释。
/usr/download/test/myshell$ cat a_file
boot
book
booze
machine
boots
bungie
bark
aardvark
broken$tuff
robots
输出:grep'\ $'a_file
/usr/download/test/myshell$ grep '\$' a_file
broken$tuff
输出:grep“ \ $” a_file
/usr/download/test/myshell$ grep "\$" a_file
boot
book
booze
machine
boots
bungie
bark
aardvark
broken$tuff
robots
输出:grep \ $ a_file
/usr/download/test/myshell$ grep \$ a_file
boot
book
booze
machine
boots
bungie
bark
aardvark
broken$tuff
robots
答案 0 :(得分:1)
\
是bash
和grep
的转义字符。
在grep \$ a_file
中,bash
认为您正在转义$
,但是不需要转义,因此正在执行的正则表达式为$
,看起来对于任何有结尾的行(毫无疑问,它们都行)。
在grep "\$" a_file
中,bash
解释了双引号,这允许在内部使用各种卑鄙的东西。具体来说,它仍然允许bash
转义,就像上面一样;再次执行的命令是$
。
在grep '\$' a_file
中,bash
解释单引号,这基本上告诉bash
将内容保持尽可能完整。值得注意的是,bash
不会删除反斜杠。正则表达式将为\$
,其中\
从美元中删除了“行尾”的特殊含义,并且正在搜索文字中的美元字符。
有关更多详细信息,请参见man bash
下的QUOTING
。