@PaulDraper Lesbar und weniger fehleranfällig> Kürzer durch einen Tastendruck
Türknauf
Einfache Anführungszeichen sind der richtige Weg. Ich hätte nie gedacht, dass Sie den Backslash auf diese Weise nutzen könnten ...
Floris
4
Bevor Ihre Shell den findBefehl ausgibt , werden verschiedene Erweiterungen durchgeführt . Dabei werden auch Sonderzeichen (oder Zeichen mit besonderer Bedeutung) verarbeitet, wobei *es sich um einen Platzhalter handelt - ein Globbing-Zeichen. Dies ist die sogenannte Dateinamenerweiterung.
Angenommen, Sie haben zwei Dateien in Ihrem Verzeichnis:
foo.pyc
bar.pyc
Dann *.pycwürde auf beide Namen erweitert. Also, wenn Sie schreiben:
find .-name *.pyc -delete
dann ruft die Shell tatsächlich auf:
find .-name foo.pyc bar.pyc -delete
Das macht nicht viel Sinn, weil man nur ein Argument dafür haben kann -name. Deshalb müssen Sie dem Sonderzeichen entkommen, um zu verhindern, dass es von der Shell interpretiert wird. Sie tun dies, indem Sie einen Backslash-Escape-Vorgang ausführen oder ihn alternativ zitieren.
find
sollte einen AbschnittNON-BUGS
mit einem ähnlichen Beispiel und einer Erklärung enthalten, warum dies erforderlich ist.Antworten:
Ein nicht zitierter Glob würde von der Shell erweitert, bevor er
find
ausgeführt wird. (Siehe Dateinamenerweiterung im Handbuch.)Also sagen:
würde tatsächlich ausführen:
Angenommen, das aktuelle Verzeichnis enthält 3 .pyc-Dateien und führt stattdessen zu einem Fehler.
Ein Backslash lässt die Shell den Glob weiterleiten
find
, dh sie verhält sich so , als ob*.pyc
sie zitiert würde.Idealerweise sollten Sie einen Glob zitieren:
quelle
Bevor Ihre Shell den
find
Befehl ausgibt , werden verschiedene Erweiterungen durchgeführt . Dabei werden auch Sonderzeichen (oder Zeichen mit besonderer Bedeutung) verarbeitet, wobei*
es sich um einen Platzhalter handelt - ein Globbing-Zeichen. Dies ist die sogenannte Dateinamenerweiterung.Angenommen, Sie haben zwei Dateien in Ihrem Verzeichnis:
foo.pyc
bar.pyc
Dann
*.pyc
würde auf beide Namen erweitert. Also, wenn Sie schreiben:dann ruft die Shell tatsächlich auf:
Das macht nicht viel Sinn, weil man nur ein Argument dafür haben kann
-name
. Deshalb müssen Sie dem Sonderzeichen entkommen, um zu verhindern, dass es von der Shell interpretiert wird. Sie tun dies, indem Sie einen Backslash-Escape-Vorgang ausführen oder ihn alternativ zitieren.quelle