По-перше, зауважте, що одна косою рискою збігається занадто багато:
$ echo $'eegg \n e.g.' | grep e\.g\.
eegg
e.g.
Що стосується Баша , то період, що втік, такий самий, як і період. Баш переходить на період, щоб грипнути . Для грепу період відповідає будь-якому.
Тепер розглянемо:
$ echo $'eegg \n e.g.' | grep e\\.g\\.
e.g.
$ echo $'eegg \n e.g.' | grep e\\\.g\\\.
e.g.
$ echo $'eegg \n e.g.' | grep e\\\\.g\\\\.
$
Коли Баш бачить подвійну косу рису, зводить її до однієї косою косою рисою і передає її на греп, який у першому з трьох вищевказаних тестів бачить, як ми хочемо, одну косу рису перед періодом. Таким чином, це робить правильно.
За допомогою потрійного косого кута Баш зводить перші два до одного косого кута. Потім він бачить \.
. Оскільки уникнутий період не має особливого значення для Баша, це зводиться до простого періоду. У результаті виходить, що греп бачить, як ми хочемо, нахил до періоду.
За допомогою чотирьох косих косих, Bash зменшує кожну пару до одного косого кута. Bash переходить на грейп двох косих і періоду. grep бачить дві косою рискою та періодом і зводить дві косої риски до одного прямого прорізу. Якщо вхід не має прямого косого кута, який слід за будь-яким символом, немає відповідностей.
Щоб проілюструвати це останнє, пам’ятайте, що всередині одинарних лапок усі символи є буквальними. Таким чином, з урахуванням наступних трьох рядків введення команда grep збігається лише в рядку з прямолінійною косою рисою на вході:
$ echo 'eegg
e.g.
e\.g\.' | grep e\\\\.g\\\\.
e\.g\.
Підсумок поведінки Баша
Для Баша правила такі
Дві косої риски зводяться до однієї косої риски.
Нахил перед нормальним персонажем, як і період, - це просто нормальний персонаж (період).
Таким чином:
$ echo \. \\. \\\. \\\\.
. \. \. \\.
Існує простий спосіб уникнути всієї цієї плутанини: у командному рядку Bash регулярні вирази повинні розміщуватися в одноцитати. Всередині одинарних цитат Баш залишає все в спокої.
$ echo '\. \\. \\\. \\\\.' # Note single-quotes
\. \\. \\\. \\\\.
\\\.
і дасть греп,\.
але це не так. гарне запитання