当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 '\\' \\