Ist Globbing ein Merkmal der Shell?

12

Ich lese viele Fragen und Antworten wie und dieser

Ich weiß, dass Platzhalter vor dem Ausführen eines Befehls durch die Shell erweitert werden, und sie sind ein Feature der Shell. Auch Platzhalter funktionieren mit diesen Befehlen, die viele Argumente akzeptieren können. In find . -name *.rb , wenn mehr als eine Datei im aktuellen Verzeichnis vorhanden ist find gibt uns einen Fehler, weil find mehrere Argumente nicht akzeptieren kann und die Lösungswege sind:

find . -name "*.rb"
find . -name '*.rb'
find . -name \*.rb

Wir entkommen dem Stern und verhindern die Erweiterung durch die Shell, aber Wildcards sind ein Feature der Shell; Wenn wir die asterisk-Shell verlassen, weiß sie nichts über ihre Bedeutung, und sie sollte eine Datei namens *.rb finden, also wie wird das Sternchen in diesem Fall erweitert?

    
Sinoosh 22.09.2016, 10:06
quelle

1 Antwort

21

Ja, die Shell versteht * als alle Dateien mit beliebigen Zeichen im Verzeichnis und *.rb als alle Dateien mit beliebigen Zeichen und endet mit .rb und erweitert sie als solche.

Der Befehl find akzeptiert selbst Globbing.

Wenn Sie das * nicht angeben, wird die Shell es erweitern bevor der Befehl find sein Argument sieht, also statt eines *.rb , der an find übergeben wurde, Die Namen aller Dateien, die mit dem glob im Verzeichnis übereinstimmen, werden an find übergeben, und find wird versuchen, sie als Argumente zu interpretieren, was wahrscheinlich zu einem Fehler führen wird oder zumindest nicht, was Sie wollen (es wird funktionieren) nur korrekt, wenn im aktuellen Verzeichnis keine übereinstimmenden Dateien vorhanden sind)

    
Zanna 22.09.2016, 10:18
quelle

Tags und Links