Подтвердить что ты не робот

Когда grep "\\" XXFile, я получил "Trailing Backslash"

Теперь я хочу найти, есть ли строки, содержащие символ '\'. Я пробовал grep "\\" XXFile, но он подсказывает "Trailing Backslash". Но когда я пробовал grep '\\' XXFile, все в порядке. Может ли кто-нибудь объяснить, почему первый случай не может работать? Спасибо.

4b9b3361

Ответ 1

Различие заключается в том, как оболочка обрабатывает обратную косую черту:

  • Когда вы пишете "\\" в двойных кавычках, оболочка интерпретирует обратную косую черту и заканчивает передачу строки \ в grep. Затем Grep видит обратную косую черту без следующего символа, поэтому он выдает предупреждение о "задней обратной косой чертой". Если вы хотите использовать двойные кавычки, вам нужно применить два уровня экранирования, один для оболочки и один для grep. Результат: "\\\\".

  • Когда вы пишете '\\' в одинарных кавычках, оболочка не выполняет никакой интерпретации, что означает, что grep получает строку \\ с неизменными обратными косыми чертами. Греп интерпретирует это как скрытую обратную косую черту, поэтому он ищет файл для символа обратной косой черты.

Если это не ясно, мы можем использовать echo, чтобы увидеть, что именно делает оболочка. echo не выполняет никакой интерпретации обратной косой черты, поэтому то, что она печатает, это то, что оболочка передала ему.

$ echo "\\"
\
$ echo '\\'
\\