Wiem, że możemy uciec od znaku specjalnego, takiego jak *(){}$
z \
, aby zostać uznani za literały.
Na przykład \*
lub\$
Ale w przypadku, .
gdy muszę to zrobić dwa razy, \\.
inaczej jest to uważane za charakter specjalny. Przykład:
man gcc | grep \\.
Dlaczego tak jest
shell-script
grep
regular-expression
quoting
escape-characters
zarejestrowany użytkownik
źródło
źródło
man bash|grep \\.
może być przykładem.man gcc | grep '\.'
.Odpowiedzi:
Ogólnie rzecz biorąc, musisz uciec tylko raz, aby uczynić postać specjalną uważaną za dosłowną. Czasami musisz to zrobić dwa razy, ponieważ Twój wzór jest używany przez więcej niż jeden program.
Niech dyskutuje twój przykład:
To polecenie jest interpretowane przez dwa programy,
bash
tłumacza igrep
. Pierwsza przyczyna ucieczkibash
wie, że\
jest dosłowna, więc druga jest przepustkągrep
.Jeśli można uciec tylko jeden raz,
\.
,bash
będzie wiedział, to kropka jest dosłowne, i przekazać.
dogrep
. Kiedygrep
to widzi.
, myśli, że kropka jest znakiem specjalnym, a nie dosłownym.
Jeśli uciekniesz dwa razy,
bash
przekaże wzór\.
dogrep
. Terazgrep
wiedz, że to dosłowna kropka.źródło
grep \\. my_file
. Linia poleceń jest interpretowana przez powłokę, używając pierwszego,\
aby uciec przed drugim, więc jeden\
jest przekazywany dosłownie do grep. Kropka.
nie jest wyjątkowa dla powłoki, więc i tak jest przekazywana dosłownie. Grep następnie czyta (pojedynczy)\
i używa go do ucieczki z kropki.
.echo .
w bash po prostu ... echo.
charakteru Bacha .