Was ist der Unterschied zwischen grep apple file
und grep "apple" file
? Was bewirkt das Setzen der Anführungszeichen? Sie scheinen beide zu funktionieren und tun genau dasselbe (dieselbe Zeile anzeigen).
Die Anführungszeichen wirken sich darauf aus, welche Zeichen Ihre Shell als besonders betrachtet und welche syntaktische Bedeutung sie hat. In Ihrem Beispiel macht dies keinen Unterschied, da apple
keine solchen Zeichen enthalten sind.
Betrachten Sie jedoch ein anderes Beispiel: grep apple tree file
Sucht nach dem Wort apple
in den Dateien tree
und file
, während grep "apple tree" file
das Wort apple tree
in der Datei gesucht wird file
. Die Anführungszeichen weisen bash darauf hin, dass das Wort Leerzeichen in "apple tree"
keinem neuen Parameter beginnt, sondern Teil des aktuellen Parameters sein soll. grep apple\ tree file
würde das gleiche Ergebnis erzielen, da \
bash anweist, die spezielle Bedeutung des folgenden Zeichens zu ignorieren und es wörtlich zu behandeln.
grep a*b equations.txt
, wird gesuchta*b
, es sei denn, es befindet sich eine Datei im aktuellen Verzeichnis, die mit a beginnt und mit b endet. In diesem Fall (da (ba) sh die Dateinamen in der Befehlszeile erweitert) wird grep mit aufgerufen Vervollständigen Sie unterschiedliche Parameter, was zu unterschiedlichen Ergebnissen führt. Dies ist normalerweise eher ein Problem bei der Suche, da ein Befehl wiefind . -name *.txt
der zu unerwartetem Verhalten führt, wenn sich im aktuellen Verzeichnis eine txt-Datei befindet. In diesem Fall ist es besser, Anführungszeichen zu verwenden."
) und einfachen Anführungszeichen ('
). Einfache Anführungszeichen verhindern die Interpretation bestimmter Zeichen$
, während doppelte Anführungszeichen die Interpretation ermöglichen. ZBgrep '${USER}'
wird nach dem Text${USER}
gesucht, wohingegengrep "${USER}"
nach dem Text, den die VariableUSER
enthält (zBjohnstacen
).Doppelte Anführungszeichen erlauben die Auswertung, einfache Anführungszeichen verhindern die Auswertung, keine Anführungszeichen erlauben die Erweiterung mit Platzhaltern, wenn sie in der Befehlszeile verwendet werden. Als erfundene Beispiele:
Das Verständnis der Funktionsweise von Zitaten ist entscheidend für das Verständnis von Bash. Beispielsweise:
Sie können einfache Anführungszeichen verwenden, um einen Befehl über eine Variable zu übergeben. Einfache Anführungszeichen verhindern die Bewertung. Doppelte Anführungszeichen werden ausgewertet.
Sie können einfache Anführungszeichen in doppelten Anführungszeichen und doppelte Anführungszeichen in doppelten Anführungszeichen verwenden. Doppelte Anführungszeichen in einfachen Anführungszeichen
dürfen jedoch nicht verwendet werden (ohne siezu maskieren). Sie werden wörtlich interpretiert. Einfache Anführungszeichen in einfachen Anführungszeichen sollten nicht gemacht werden (ohne sie zu verlassen).Um Bash effektiv nutzen zu können, müssen Sie ein gründliches Verständnis der Anführungszeichen haben. Sehr wichtig!
Im Allgemeinen verwende ich keine Anführungszeichen, wenn Bash Elemente (z. B. ein Array) erweitern soll, ich verwende einfache Anführungszeichen für Zeichenfolgen, die nicht geändert werden dürfen, und ich verwende doppelte Anführungszeichen für Variablen das sind wahrscheinlich jede Art von Zeichenfolge zurück. Damit soll sichergestellt werden, dass Leerzeichen und Sonderzeichen erhalten bleiben.
quelle