Der Schlüsselschlüsselunterschied zwischen diesen beiden Befehlssequenzen besteht darin, dass die zweite enthält, echo $b
die die Aufteilung von Shell- Wörtern durchführt . Ersetzen Sie Folgendes, damit die zweite Befehlssequenz mit der ersten übereinstimmt:
echo $b | grep "*)>nS4XkrlH @XUL"
mit:
echo "$b" | grep "*)>nS4XkrlH @XUL"
Wortteilung
Beobachten Sie, wie Leerzeichen in diesen beiden echo
Anweisungen behandelt werden:
$ b="a b c"
$ echo "$b"
a b c
$ echo $b
a b c
Ohne die doppelten Anführungszeichen führt die Shell eine Wortteilung für die Argumente zu durch echo
. Dies bedeutet, dass alle aufeinander folgenden Leerzeichen auf ein einzelnes Leerzeichen komprimiert werden. Bei doppelten Anführungszeichen wird die Wortteilung unterdrückt und das Leerzeichen beibehalten.
Wortteilung und ein grep
Muster mit mehreren Leerzeichen
Ihr grep
Muster enthält zwei aufeinanderfolgende Leerzeichen. Wenn das Argument to nicht echo
in doppelten Anführungszeichen steht, enthält die Ausgabe von echo
diese beiden Leerzeichen nicht und es wird keine Übereinstimmung gefunden. Beobachten:
$ b="*)>nS4XkrlH @XUL"
$ echo $b | grep "*)>nS4XkrlH @XUL"
$ echo "$b" | grep "*)>nS4XkrlH @XUL"
*)>nS4XkrlH @XUL
Das erste grep
stimmt mit nichts überein, das zweite mit nichts. Der Unterschied ist die Wortspaltung der Muschel.