2016-04-11 4 views
3

der Ausgang für die folgenden zwei Befehle sind die gleichen:‚‘ Backslash in Hochkommata unvorhersehbar Ausgang in Shell-Skript gibt linux

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

und auch der Ausgang für den nächsten Befehl ist auch gleich,

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

Kann jemand pls führen, warum es in der gleichen Ausgabe resultiert? Warum wirkt sich ein zusätzlicher Backslash auch nicht auf die Ausgabe aus?

jedoch, wenn wir die Anzahl der Backslash zu vier in grep dann der Ausgabe weggeht erhöhen,

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

keine Ausgabe

Pls leitet mich mit dem Verhalten von grep und Backslash in Einzel- und Doppel Zitate.

+1

superuser.com wäre der richtige Ort, um diese zu fragen .... – tod

+1

@tod oder [unix.se]:

Es wird mit diesen Beispielen klar sein? –

+1

grep akzeptiert Regex, schauen Sie, wie Backslashes in Regex für eine Antwort verhalten (vielleicht dies, http: //stackoverflow.com/questions/4025482/cant-escape-the-backslash-with-regex). Wenn Sie einfach eine exakte Übereinstimmung wollen, verwenden Sie 'grep -F ' – 123

Antwort

2

In den ersten beiden Beispielen ist es passend, weil \\ in Ihrem Regex-Muster eine einzige \ in Eingabe übereinstimmt. Ein extra \ im 2. Beispiel ist nur entkommen n und passender Literal n in Eingabe.

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

echo 'myname' | grep 'myna\me' 
myname 

echo 'myname' | grep 'm\yn\am\e' 
myname 

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

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

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

echo 'my\name' | grep 'my\\\nam\e' 
my\name 
+0

Was ist, wenn wir das Regex-Muster anstelle von einfachen Anführungszeichen mit doppelten Anführungszeichen versehen, wie würde dann das Verhalten variieren? –

+1

In doppelten Anführungszeichen wird \ als \\ eingegeben, also sollten Sie folgendes verwenden: 'echo 'my \ name' | ggrep "mein \\\\ name" mein \ name' – anubhava

+0

sir was ist die Art von Backslash in doublequotes von echo-Anweisung. Von Ihrem Kommentar habe ich verstanden, dass in Regex mit Grep verwendet wird ein doppelter Backslash als einzelne in Anführungszeichen behandelt, aber was ist mit lhs von Rohr, wenn ich dort doppelte Anführungszeichen dann hw wud b das Verhalten pls erklären? –