When grep "\\" XXFile I got "Trailing Backslash"
bash, grep, linux, shell
Solution
The difference is in how the shell treats the backslashes:
When you write `"\\"` in double quotes, the shell interprets the backslash escape and ends up passing the string `\` to grep. Grep then sees a backslash with no following character, so it emits a "trailing backslash" warning. If you want to use double quotes you need to apply two levels of escaping, one for the shell and one for grep. The result: `"\\\\"`.
When you write `'\\'` in single quotes, the shell does not do any interpretation, which means grep receives the string `\\` with both backslashes intact. Grep interprets this as an escaped backslash, so it searches the file for a literal backslash character.
If that's not clear, we can use `echo` to see exactly what the shell is doing. `echo` doesn't do any backslash interpretation itself, so what it prints is what the shell passed to it.
$ echo "\\"
\
$ echo '\\'
\\
Problem
Now I want to find whether there are lines containing '\' character. I tried `grep "\\" XXFile` but it hints "Trailing Backslash". But when I tried `grep '\\' XXFile` it is OK. Could anyone explain why the first case cannot run? Thanks.