当grep"\\"XXFile我得到"Trailing Backslash"

don*_*ong 60 linux bash shell grep

现在我想查找是否有包含'\'字符的行.我试过grep "\\" XXFile但它暗示"Trailing Backslash".但是,当我尝试grep '\\' XXFile它是可以的.谁能解释为什么第一个案例无法运行?谢谢.

Joh*_*ica 103

区别在于shell如何处理反斜杠:

  • 当您"\\"使用双引号编写时,shell会解释反斜杠转义并最终将字符串传递\给grep.Grep然后看到一个没有后续字符的反斜杠,因此它会发出"尾随反斜杠"警告.如果你想使用双引号,你需要应用两个转义级别,一个用于shell,一个用于grep.结果:"\\\\".

  • 当你写'\\'在单引号,外壳也没有做任何解释,这意味着grep的接收字符串\\与两个反斜杠完好.Grep将此解释为转义反斜杠,因此它会在文件中搜索文字反斜杠字符.

如果不清楚,我们可以echo用来确切了解shell正在做什么.echo不会做任何反斜杠解释本身,所以它打印的是shell传递给它的内容.

$ echo "\\"
\
$ echo '\\'
\\
Run Code Online (Sandbox Code Playgroud)


Nik*_*ros 5

您可以将命令编写为

grep "\\\\" ...
Run Code Online (Sandbox Code Playgroud)

它有两对反斜杠,bash将转换为两个单反斜杠。然后,这对新对将作为转义的反斜杠传递给grep,让您获得所需的内容。

  • 我称`grep'\\'`更容易理解。 (2认同)