Mustervergleich ohne Echo

Mustervergleich ohne Echo

Warum sind die Ausgaben unterschiedlich?

touch a aa bb ccc

echo *

a aa bb ccc // Ich habe verstanden, * bedeutet Übereinstimmungen mit null oder mehr

*

aa bb ccc // Ich bin verwirrt.

echo ?

ein //OK

?

a aa bb ccc // wieder verwirrt.

*?

aa bb ccc // sehr verwirrt

* *

a aa aa bb bb ccc ccc // sehr sehr verwirrt

Ich frage mich, was der Unterschied zwischen der Verwendung von Echo und der Nichtverwendung ist.

Antwort1

Jede Zeile, die Sie schreiben, muss einen Befehl enthalten, normalerweise das erste Wort.

Um etwas auszudrucken, ist ein gängiger Befehl echo.

Wenn das aktuelle Arbeitsverzeichnis (pwd) die Dateien , , , und enthält , adruckt aadieser bbBefehl alle Dateien im Verzeichnis aus:ccc

 $ echo *
 a aa bb ccc

Und dieser Befehl druckt alle Dateien im pwd, die ein Zeichen haben:

$ echo ?
a

Wenn Sie jedoch keinen Befehl angeben, wird das erste „Wort“ (meistens: bis zum ersten Leerzeichen) als Befehl betrachtet.

Wenn Sie nur das Sternchen angeben *, wird das erste Wort, das sich aus der Erweiterung des Sternchens ergibt, als auszuführender Befehl verwendet.

Wenn der Befehl anicht existiert, wird ein Fehler ausgegeben:

$ *
bash: a: command not found

Wenn ein Befehl aufgerufen wird a, wird er mit den drei Argumenten aufgerufen aa bb ccc.

Da Sie keine weiteren Details angeben, können wir nur raten, welcher Befehl mit dem Namen ausgeführt wird a(es ist kein Standardbefehl). Außerdem wissen wir nicht, welche Shell Sie verwenden.

Aber alle deine Beispiele zeigen, dass das erste afehlt:

$ *
aa bb ccc              ### missing first `a`.
$ *?
aa bb ccc              ### missing first `a`.
$ * *
a aa aa bb bb ccc ccc  ### missing first `a`.

Ausser für:

$ ?
a aa bb ccc

Da wir nicht wissen, um welchen Befehl es sich handelt, ist es schwierig, hier eine Schlussfolgerung zu ziehen a.

verwandte Informationen