Ich weiß, dass wir einem besonderen Charakter wie *(){}$
mit entkommen können \
, um als Literaten zu gelten.
Zum Beispiel \*
oder\$
Aber im Falle, .
dass ich es zweimal machen muss, gilt \\.
es als Sonderzeichen. Beispiel:
man gcc | grep \\.
Wieso ist es so?
shell-script
grep
regular-expression
quoting
escape-characters
registrierter Nutzer
quelle
quelle
man bash|grep \\.
könnte ein Beispiel sein.man gcc | grep '\.'
.Antworten:
Im Allgemeinen müssen Sie nur einmal entkommen, um ein Sonderzeichen als wörtlich zu betrachten. Manchmal müssen Sie es zweimal tun, weil Ihr Muster von mehr als einem Programm verwendet wird.
Lassen Sie uns Ihr Beispiel diskutieren:
Dieser Befehl wird von zwei Programmen
bash
interpretiert , Interpreter undgrep
. Die erste Flucht verursachtbash
weiß\
ist wörtlich, so dass der zweite für ist passierengrep
.Wenn Sie nur einmal entkommen
\.
,bash
wissen Sie , dass dieser Punkt wörtlich ist, und gehen Sie.
zugrep
. Wenngrep
man das sieht.
, denkt man, der Punkt ist ein Sonderzeichen, kein wörtliches Zeichen.
Wenn Sie zweimal entkommen,
bash
wird vergehen Muster\.
zugrep
. Jetztgrep
wissen Sie, dass es ein buchstäblicher Punkt ist.quelle
grep \\. my_file
. Die Kommandozeile wird von der Shell interpretiert, wobei die erste verwendet wird\
, um der zweiten zu entgehen, so dass eine\
buchstäblich an grep übergeben wird. Der Punkt.
ist nicht speziell für die Shell, daher wird er trotzdem wörtlich übergeben. Grep liest dann die (einzelne)\
und verwendet sie, um den Punkt zu maskieren.
.echo .
in der Bash nur ... Echos Bach.
Charakter.