Ist Globbing ein Feature der Shell?

12

Ich habe viele Fragen und Antworten wie diese und diese gelesen

Ich weiß, dass Wildcards von der Shell vor dem Ausführen eines Befehls erweitert werden und ein Feature der Shell sind. Auch Wildcards funktionieren mit Befehlen, die viele Argumente akzeptieren können. In find . -name *.rb wenn wir mehr als eine Datei im aktuellen Verzeichnis haben findwird uns einen Fehler , da find nicht mehrere Argumente und die Art und Weise akzeptieren können zu lösen diese sind:

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

Wir entziehen uns dem Sternchen und verhindern die Erweiterung durch die Shell, aber Wildcards sind ein Merkmal der Shell. Wenn wir entkommen, weiß die Asterisk-Shell nichts über ihre Bedeutung und sollte eine Datei mit dem Namen *.rbfinden. Wie wird der Asterisk in diesem Fall erweitert?

Sinoosh
quelle

Antworten:

21

Ja, die Shell versteht *alle Dateien mit beliebigen Zeichen im Verzeichnis und *.rballe Dateien mit beliebigen Zeichen und Endungen .rbund erweitert sie als solche.

Der findBefehl selbst akzeptiert Globbing.

Wenn Sie das Angebot nicht , *dann wird die Schale es zu erweitern , bevor der findBefehl ihr Argument sieht, so anstelle eines glob *.rbweitergegeben find, die Namen aller Dateien , die glob im Verzeichnis Anpassung wird weitergegeben find, und findwerden versuchen , sie zu interpretieren als Argumente, die wahrscheinlich zu einem Fehler führen oder zumindest nicht das, was Sie wollen (es funktioniert nur dann richtig, wenn sich keine passenden Dateien im aktuellen Verzeichnis befinden)

Zanna
quelle
Danke, es bedeutet, wir sagen zu Shell, es ist kein Glob, aber einige Befehle können Wildcards erweitern? Oder können wir sagen, ob wir eine Shell haben, ohne zu wissen, wie man ein Globbing ausführt?
Sinoosh
5
Wenn das *in Anführungszeichen gesetzt wird, wird es von der Shell nicht erweitert, und das Argument einschließlich des Glob wird an den Befehl übergeben, der das Glob verstehen kann. Dies gilt auch für alle Befehle, die reguläre Ausdrücke akzeptieren, die immer in Anführungszeichen gesetzt werden sollten ...
Zanna
1
Mein Vergnügen ^ _ ^
Zanna
7
@Sinoosh: Beachten Sie, dass nicht alle Befehle die Glob-Syntax verstehen. Es ist zufällig ein Feature vonfind
slebetman
1
@Sinoosh Find "erweitert" den Platzhalter nicht wirklich, sondern verwendet ihn als Test, um jedem gefundenen Dateinamen zu entsprechen. Es gibt (sehr) wenige Befehle, die Platzhalter im herkömmlichen Sinne erweitern. Mit unzip und 7z können beispielsweise mehrere Archive geöffnet werden (wenn ihre Argumente normalerweise die Form " [archive filename single argument] [list of files to extract]" haben).
Random832