it-swarm.com.de

Ist Globbing ein Merkmal der Shell?

Ich las viele Fragen und Antworten wie dieses und dieses

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 wird bei mehr als einer Datei im aktuellen Verzeichnis find ein Fehler ausgegeben, da find nicht mehrere Argumente akzeptieren kann.

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 dem Sternchen entkommen, weiß Shell nichts über seine Bedeutung und sollte eine Datei mit dem Namen *.rb finden. Wie wird das Sternchen in diesem Fall also erweitert?

12
Sinoosh

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

Der Befehl find akzeptiert das Globbing.

Wenn Sie den * nicht in Anführungszeichen setzen, wird er von der Shell erweitert vor Der Befehl find sieht sein Argument, sodass anstelle eines Globus *.rb die Namen von find übergeben werden Alle 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ührt oder zumindest nicht, was Sie wollen (dies funktioniert nur dann richtig, wenn keine Übereinstimmung vorliegt Dateien im aktuellen Verzeichnis)

21
Zanna