выходные данные для следующих двух команд одинаковы:

echo 'my\name' | grep 'my\\name'
my\name

а также вывод для следующей команды также такой же,

echo 'my\name' | grep 'my\\\name'
my\name

Может кто-нибудь PLS руководство, почему это приводит к тому же результату ?? Почему дополнительная обратная косая черта также не влияет на изменение выходных данных?

однако, если мы увеличим число обратной косой черты до четырех в grep, то результат исчезнет,

echo 'my\name' | grep 'my\\\\name'

нет выхода

Просьба вести меня с поведением grep и обратной косой черты в одинарных и двойных кавычках.

1 ответ1

0

Использование обратной косой черты в регулярном выражении (например, в grep) отличается от того, как оболочка может его интерпретировать. Оболочка может смотреть на \n и без кавычек конвертировать в возврат каретки. В регулярном выражении \ означает «не интерпретируйте следующий символ как специальный символ регулярного выражения, рассматривайте его как буквальный символ».

В этом примере

'my\\\name'

Ты говоришь:

Найдите "my", за которым следует буквальный «\» (\\), за которым следует буквенный "n" (\n).

Так что это соответствует my\name

Следующий пример:

'my\\\\name'

Ты говоришь:

Найдите "мой", за которым следует буквальное «\» (\\), за которым следует другой буквальный «\» (\\).

Так что это не соответствует my\name .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .