Wie heißt die
*.*
Symbol und welche Bedeutung hat es?
*.*
unter alten Windows / DOS-SystemenDie Bedeutung hier hängt mehr mit Windows / DOS zusammen als mit Unix / Linux. Auf alten Windows / DOS-Systemen war es ein 'Wildcard'-Muster. Wildcard-Muster wurden verwendet, um Dateinamen auf ähnliche Weise wie Unix-Globs abzugleichen. Der *.*
Platzhalter wurde üblicherweise für jede Datei verwendet.
Wie bei einem Unix-Glob stimmt das mit einer *
beliebigen Folge von Zeichen in einem Dateinamen überein, so dass es *
für sich genommen auch mit einer beliebigen Datei übereinstimmt. Der Grund für *.*
die Übereinstimmung mit Dateinamen liegt jedoch in der unterschiedlichen Funktionsweise dieser Platzhalter. Nach diesem Artikel :
Alle Zeichen außer einem Punkt nach einem Sternchen haben keine Auswirkung, da der Sternchen den Cursor auf Position 12 bewegt. An diesem Punkt ändert nichts den Analysezustand außer einem Punkt, der die letzten drei Positionen löscht und den Cursor bewegt.
Dieses Verhalten (aus Unix-Sicht etwas merkwürdig) bedeutet, dass ein Punkt nach einem *
nicht mit einem Punkt übereinstimmt, sondern nur eine hackige Methode ist, mit der Sie dem Muster weitere Zeichen hinzufügen können. Das bedeutet, dass das Hinzufügen eines weiteren *
Objekts mit den letzten drei Positionen übereinstimmt.
Dies ist etwas sinnvoller, wenn Sie bedenken, dass die Syntax auf DOS- und alten Windows-Systemen vor Windows 95 verwendet wurde, für die 8.3-Dateinamen erforderlich waren . Diese Dateinamen durften nur einen Punkt und höchstens drei Zeichen nach dem Punkt haben. Die meisten, wenn nicht alle Dateien auf dem System eine dreistellige Erweiterung haben würden (obwohl technisch gesehen eine kürzere oder gar keine Erweiterung zulässig war), so ist es meiner Meinung nach sinnvoll *.*
, jede Datei abzugleichen (zumindest aus der Perspektive einer verzerrten Windowsey-Logik) ).
*.*
in Unix-ShellsIn Unix-Shells stellt dies, wie andere bereits betont haben, eine "Pfadnamenerweiterung" oder "Glob" dar. Das *
hat kein seltsames Springen zum Endverhalten und führt daher nicht dazu, dass nachfolgende Zeichen ignoriert werden. *.*
Das Muster passt zu jedem Dateinamen, der einen Punkt enthält (außer am Anfang). Dies entspricht definitiv keiner Datei, da es auf einem Unix / Linux-System viele Dateien gibt, die keine Erweiterung haben (oder auf andere Weise einen Punkt enthalten, da dies ebenfalls zulässig ist).
Der Grund dafür, *.*
dass unter Unix am Anfang der Dateinamen kein Punkt gefunden wird, liegt darin, dass beim Platzieren eines Punkts die Dateien "versteckt" werden und versteckte Dateien standardmäßig von Globs ausgeschlossen werden. Um sie in einer POSIX-Shell abzugleichen, muss ein Punkt explizit am Anfang des Musters platziert werden. In bash
der dotglob
Shell kann die Option gesetzt werden oder die GLOBIGNORE
Variable kann passend gesetzt werden, aber das ist eine andere Frage!
*7.*
werden alle Dateien abgerufen , deren letztes Zeichen vor der Erweiterung a7
steht. Mit*sa*
werden alle Dateiensa
abgerufen , die die Teilzeichenfolge an einer beliebigen Stelle im Dateinamen usw. enthalten. (Dementsprechend trägt der Artikel, den Sie zitieren, den Titel " Wie haben Wildcards in MS-DOS funktioniert ?" (Hervorhebung von mir hinzugefügt).)Es ist
glob
in Bash, unten habe ich aus Bash-Handbuch zitiert:In diesem Fall
*.*
stimmen Sie mit allen Dateien überein,.
deren Name einen Punkt enthält .Weitere Details finden Sie hier .
quelle
Das Sternchen
*
ist eineglob
Shell-Sprache. Zitieren aus der Shell-Befehlssprache :Es stimmt jedoch nicht mit Dateinamen überein, die mit a beginnen, es
.
sei denn, die Shell-Optiondotglob
ist aktiviert.Wenn Sie es verwenden
*.*
, passt es zu allem, was:.
.
Möglicherweise möchten Sie auch auf Dateinamenerweiterung im Handbuch verweisen .
quelle
Viele Leute, die von Windows kommen, denken, dass dies
*.*
für alle Dateien gilt. Unter Windows ist es das. Unter UNIX sind es alle Dateien, deren Name mindestens einen Punkt enthält.*
für sich allein funktioniert gut in Windows (aus dem frühen DOS); Allerdings wurden die alten Lehrbücher veröffentlicht*.*
und es scheint eine schwierige Angewohnheit zu sein, diese zu brechen.quelle
*
ist ein Platzhalter, der von der Shell verwendet wird, um die Dateinamenerweiterung durchzuführen , auch bekannt als "Globbing".*
dehnt sich auf alles aus, einschließlich nichts (z. B.*.*
wird übereinstimmenfile.
, usw.). Der andere gebräuchliche Platzhalter ist?
, der jedem einzelnen Zeichen entspricht.Verwechseln Sie die Funktion dieser Platzhalter nicht mit der Verwendung derselben Zeichen in regulären Ausdrücken (z. B. mit grep).
quelle
Das ist Stern-Punkt-Stern - zumindest in der DOS-Welt (und später natürlich in der Windows-Welt). In DOS hat der Punkt
.
eine besondere magische Bedeutung, da die Dateinamen eine achtstellige Basis (später erweitert, aber wir bleiben bei der alten Schule) und eine dreistellige Erweiterung (die den Dateityp definiert) sind. In Unix wird der Dateityp normalerweise durch die ersten zwei Bytes der Datei (oder andere magische Zeichen) definiert, und die Erweiterung ist informativ, hat aber keine große Bedeutung. Außer wenn dies alles verschwommen ist.In Unix gibt es also keine besondere Bedeutung. Das Sternchen ist ein "Globbing" -Zeichen in Unix-Shells und ein Platzhalter für eine beliebige Anzahl von Zeichen (einschließlich Null).
?
ist ein weiteres häufig vorkommendes Zeichen, das genau mit einem beliebigen Zeichen übereinstimmt .*.*
Stimmt mit allen Dateinamen überein, die mindestens einen enthalten.
. Es hat keinen speziellen Namen oder irgendeine Bedeutung mehr als*a*
oder*_*
. Und*.?
würde alle Dateien mit einem Punkt und genau einem Zeichen nach diesem Punkt abgleichen. Es gibt auch einige kompliziertere erweiterte Globbing-Muster - siehe die Manpage Ihrer Shell.Das "New Hacker's Dictionary" (eine Erweiterung der alten MIT "Jargon File") stellt fest, dass "star" der gebräuchlichste Name für das
*
Symbol ist (gefolgt vonsplat
), und ich denke, dass dies in der Praxis immer noch zutrifft und.
definitiv üblich ist. " dot ", obwohl es keine besondere Bedeutung als konglomeriertes Symbol hat, heißt die Sequenz unter Unix vernünftigerweise immer noch star-dot-star . (Es ist nur weniger nützlich.)quelle
Hier gibt es eigentlich 2 Symbole, Sternchen
*
und Punkt.
. Die Shells interpretieren normalerweise nur das Sternchen als ein beliebiges Zeichen, aber in Regex würde dies eine gierige Kugel bedeuten. In diesem Fall würde es mit allem übereinstimmen, das nicht mit einem Punkt endet oder beginnt, aber mindestens einen enthält:quelle
onlydotatend.
Fall ist sicherlich ein Spiel?touch 'onlydotatend.' && echo *.*
gibt es nicht zurückbash
unddash
. Welche Shell benutzt du?zsh
Konfiguration versucht und es funktioniert auch dort. Ich verstehe nicht, warumonlydotatend.
es keine Übereinstimmung geben kann. Gibt es dafür eine Konfigurationsoption?