Warum echointerpretiert das *das gleiche wiels

Warum echointerpretiert das *das gleiche wiels

Beachten Sie diese shellBefehle

$ls
my_app  newlist  note

Und

$echo *
my_app  newlist  note

Und

$printf *
my_app

Der erste Befehl lslistet Informationen zu den Dateien auf (standardmäßig das aktuelle Verzeichnis). Der zweite Befehl echoist ein Befehl, der die Zeichenfolgen ausgibt, die ihm als Argumente übergeben werden. Wenn ich jedoch tippe, echo *wird dasselbe ausgegeben wie ls.

Und printf *gibt mir nur den ersten Dateinamen als Ausgabe

Warum wird das so echointerpretiert ? Und warum , was noch seltsamer ist: mit der Ausgabe nur des ersten?*printf

Antwort1

Warum echointerpretiert das *das gleiche wiels

Die Antwort ist einfach. Das ist es nicht. echotut genau das, was Sie sagen: Es iteriert durch seine Argumente und gibt sie mit einem Leerzeichen dazwischen aus.

Warum also beobachten wir ein Verhalten wie ls?

*Dies liegt daran, dass die Shell die durch eine Parameterliste ersetzt, die auf alle Dateien passt (die nicht mit einem beginnen .(es sei denn, dotglob ist aktiviert)). Dann echomacht sie einfach ihre Arbeit. Diese Glob-Ersetzung erfolgt füralleBefehle, da dies von der Shell und nicht vom Befehl ausgeführt wird.

Und was ist mit printf?

printfist die Druckformatierung. Das erste Argument ist das Format. Wenn Sie dies tun printf "%s " *, ist es wie echo.

Wenn die erste Datei ist hello%sworld, erhalten Sie:hellofile2world hellofile3world

Mehr erfahren

Versuchen Sie dies. Dadurch erfahren Sie, was passiert. (Ich schlage nicht vor, dass Sie diesen Code für etwas Reales verwenden. Verwenden Sie ihn nur zum Lernen.)

Versuchen Sie es cat /proc/self/cmdline * | less– Es wird beim Start angezeigt, wie die Befehlszeile aussieht (nachdem die Shell ihren Teil getan hat).

Antwort2

nur weil es keine Eingabe zum Anzeigen hat, sondern eine Liste von * (allen) Dateien als Parameter zum Anzeigen als Zeichenfolge

so einfach ist das

während * Parameter ist, gibt es den "*"-Inhalt wieder, also die Liste der Dateien

verwandte Informationen