当grep“\\”XXFile我得到了“Trailing Backslash”
现在我想查找是否有包含'\'字符的行。 我尝试了grep "\\" XXFile
但它提示“尾随反斜杠”。 但是当我尝试grep '\\' XXFile
它是好的。 任何人都可以解释为什么第一个案件不能运行? 谢谢。
区别在于shell如何处理反斜杠:
-
当你用双引号写
"\\"
时,shell解释反斜杠转义,最后把string\
传递给grep。 然后Grep会看到一个没有下一个字符的反斜杠,所以它会发出一个“反斜杠”警告。 如果你想使用双引号,你需要应用两级转义,一个用于shell,一个用于grep。 结果:"\\\\"
。 -
当你用单引号写
'\\'
时,shell不做任何解释,这意味着grep接收string\\
并且两个反斜杠都是完整的。 Grep将其解释为一个转义反斜杠,所以它在文件中search文字反斜杠字符。
如果还不清楚,我们可以使用echo
来查看shell正在做什么。 echo
本身并不做任何反斜杠解释,所以它打印的是shell传递给它的东西。
$ echo "\\" \ $ echo '\\' \\