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 , a
druckt aa
dieser bb
Befehl 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 a
nicht 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 a
fehlt:
$ *
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
.