Willemers Informatik-Ecke
Die Shell löst Wildcards auf
Will man mehrere Dateien als Argumente für einen UNIX-Befehl verwenden, kann
man sie meist einfach aufzählen. Die meisten Kommandozeilenprogramme sind
unter UNIX so geschrieben, dass sie beliebig viele Dateien als Argumente akzeptieren. Um die Aufzählung zu vereinfachen, kann man mit Hilfe einer Maske mehrere Dateien zusammenfassen. Die Shell sucht die auf die Maske passenden Dateien zusammen und übergibt sie als Liste dem aufgerufenen Programm.
Wildcards: *, ? und die eckigen Klammern
Stern
Um Dateien mit ähnlichen Namen zu ermitteln, wird meist der Stern als
Platzhalter verwandt. Dieser steht als Ersatz für beliebig viele beliebige
Zeichen. An
der Stelle des Sterns kann auch gar kein Zeichen sein. Die folgende Liste
zeigt einige Beispiele:
- ls prog* Alle Dateien, die mit prog anfangen
- ls *mein Alle Dateien, die mit mein aufhören
- ls OS*.c Alle Dateien, die mit OS anfangen und mit .c aufhören
- ls *dat* Alle Dateien, die dat im Namen enthalten
Fragezeichen
Soll eine genaue Anzahl von Buchstaben freigehalten werden, benutzt man das
Fragezeichen. Es steht für genau einen Buchstaben. M??s steht also
für Maus, Mais oder Muks. Murks würde nicht passen, da die drei Buchstaben
zwischen M und s nicht auf die zwei Fragezeichen passen.
Auch eine Kombination aus Fragezeichen und Sternen macht Sinn. Wenn man
beispielsweise alle Dateien und Verzeichnisse, die mit einem Punkt beginnnen
löschen möchte,1)
sollte man lieber nicht
rm -r .*
eingeben. Da der Stern auch die leere Zeichenkette symbolisiert, würde damit
das aktuelle und das Elternverzeichnis ausgeräumt. Das Elternverzeichnis ist
das davor liegende Verzeichnis und wird mit .. angesprochen.
Besser ist da der Gedanke
mit rm -r .??* zu arbeiten. Damit werden dann weder . noch ..
getroffen, da beide nicht aus drei Zeichen bestehen. Allerdings würde auch
die Datei .ab stehen bleiben.
Eckige Klammern
Neben diesen bekannten Wildcards gibt es noch die Möglichkeit mit den
rechteckigen Klammern für ein Zeichen gewisse Alternativen zu verwenden.
Beispielsweise bedeutet [Mm]akefile, dass die Datei makefile
oder Makefile
heißen kann. Die Datei [A-Z][0-9]?* muss mit einem Großbuchstaben beginnen,
darauf muss eine Ziffer folgen und sie muss mindestens aus drei Zeichen bestehen.
Sonderzeichen als Parameter
Will man ein Zeichen an ein Programm geben, das von der Shell interpretiert
wird, muss es davor geschützt werden. Dies kann bei einzelnen Zeichen durch
Voranstellen eines Backslash (\) erfolgen.
Die deutsche Übersetzung von Backslash hieße "rückwärtiger Schrägstrich".
\* steht für einen Stern, \? für ein Fragezeichen
im Namen. Man sollte, um Mißverständnisse zu vermeiden, jedoch diese Zeichen in
Dateinamen besser nicht benutzen.
Alternativ kann das Argument auch in Anführungszeichen (") oder
Hochkommata (')
gesetzt werden. In diesem Fall interpretiert die Shell nicht die Sonderzeichen,
sondern reicht sie so direkt an das aufgerufene Programm weiter.2)
1 Es ist übrigens keine gute Idee, diese Dateien aus dem
Heimatverzeichnis löschen zu wollen. Sollten Sie es gerade getan haben,
vergessen Sie, wo sie das gelesen haben.
2 Der Unterschied zwischen beiden ist, dass in Anführungszeichen Variablen noch
aufgelöst werden, in Hochkommata nicht.