Теперь я хочу найти, есть ли строки, содержащие символ '\'. Я пробовал grep "\\" XXFile
, но он подсказывает "Trailing Backslash". Но когда я пробовал grep '\\' XXFile
, все в порядке. Может ли кто-нибудь объяснить, почему первый случай не может работать? Спасибо.
Когда grep "\\" XXFile, я получил "Trailing Backslash"
Ответ 1
Различие заключается в том, как оболочка обрабатывает обратную косую черту:
-
Когда вы пишете
"\\"
в двойных кавычках, оболочка интерпретирует обратную косую черту и заканчивает передачу строки\
в grep. Затем Grep видит обратную косую черту без следующего символа, поэтому он выдает предупреждение о "задней обратной косой чертой". Если вы хотите использовать двойные кавычки, вам нужно применить два уровня экранирования, один для оболочки и один для grep. Результат:"\\\\"
. -
Когда вы пишете
'\\'
в одинарных кавычках, оболочка не выполняет никакой интерпретации, что означает, что grep получает строку\\
с неизменными обратными косыми чертами. Греп интерпретирует это как скрытую обратную косую черту, поэтому он ищет файл для символа обратной косой черты.
Если это не ясно, мы можем использовать echo
, чтобы увидеть, что именно делает оболочка. echo
не выполняет никакой интерпретации обратной косой черты, поэтому то, что она печатает, это то, что оболочка передала ему.
$ echo "\\"
\
$ echo '\\'
\\