grep '\$' 和 grep "\$" 有什么区别?

What's the differences between grep '\$' and grep "\$"?

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

\bashgrep 的转义字符。

  • grep $ a_file中,bash认为你在转义$,其实不需要转义,所以执行的regexp是$,它会查找任何有结尾的行(不出所料,所有行都有结尾)。

  • grep "$" a_file 中,bash 解释双引号,它允许在内部进行各种繁琐的事情。具体来说,它仍然允许 bash 转义,就像上面一样;正在执行的命令又是 $.

  • grep '$' a_file中,bash解释单引号,基本上告诉bash尽可能保持里面的东西完好无损。值得注意的是,bash 不会删除反斜杠。正则表达式将为 $,其中 \ 从美元中删除 "end of line" 的特殊含义,并搜索文字美元字符。

有关详细信息,请参阅 QUOTING 下的 man bash