Warum führt die Shell eine Pfadnamenerweiterung für Dienstprogramme durch?

Warum führt die Shell eine Pfadnamenerweiterung für Dienstprogramme durch?

Diese Frage ist eine Fortsetzung vonhttps://stackoverflow.com/questions/7136899/wie-funktioniert-grep

Es scheint, dass shelldie Erweiterung von *.*auf alle anwendbaren/verfügbaren Dateien erfolgt und diese Dienstprogrammen wie zur Verfügung stellt grep.

Warum ist das shellnötig? Warum überlässt man die Pfadnamenerweiterung nicht dem Dienstprogramm selbst?

Antwort1

Ein Grund dafür ist, dass jedes Dienstprogramm diese Funktionalität implementieren müsste. Wenn die Shell dies tut, wird es nur einmal implementiert.

Antwort2

Denn wenn die Shell diese Funktion nicht bereitstellen würde, müsste jedes einzelne kleine Dienstprogramm sie implementieren.

Dadurch wird auch sichergestellt, dass die Erweiterung bei jedem Befehl genau gleich funktioniert.

Übrigens kommt die Erweiterung nicht nur in Befehlsargumenten vor, sie kann überall in einem Shell-Skript vorkommen, zum Beispiel:

for file in *.c; do something; done

Antwort3

Wenn die Shell diese Funktionalität nicht bereitstellen würde, müsste jedes Dienstprogramm seine eigene Platzhalterfunktion implementieren (und die meisten würden sich wahrscheinlich nicht die Mühe machen). So wie es ist, muss jedes Dienstprogramm nur einzelne Dateinamen verarbeiten, was viel einfacher ist.

Antwort4

Es ist die Unix-Philosophie: „Ein Tool muss eine Sache gut machen“. Warum sollte jemand diese Codewiederholung in jedem Dienstprogramm wollen? Was bringt es, wenn jedes einzelne Dienstprogramm nach main() expand_pathnames() aufruft? Was bringt es, diese Last nicht nur C-Programmen, sondern auch allen kompilierten Sprachen und Skriptsprachen aufzubürden? Das alles hat keinen Sinn. Deshalb haben Microsoft und die cmd.exe-Abscheulichkeit es vom ersten Tag an falsch gemacht :-)

Übrigens, wenn Sie das Globbing von Dateinamen deaktivieren möchten, können Sie das tun mit

$ set -f
$ echo *
*
$ set +f
$ echo *
readme foo.o bar.txt

verwandte Informationen