UnixTools01 06
Wildcards
Viele Shell Kommandos besitzen Argumente, die wir, durch Leerzeichen voneinander getrennt) hinter dem Kommando eingeben. Zum Beispiel hat in diesem Beispiel das Kommando ls drei Argumente, file1, file2 und file3.
$ ls file1 file2 file3
Normalerweise werden die Argumente von der Shell genau so an das aufgerufene Programm (hier ls) übergeben, wie wir sie hingeschrieben haben. Aber es geht auch anders. Enthält das Argument Leerzeichen, oder andere Sonderzeichen (das sind Zeichen mit einer besonderen Bedeutung), dann müssen wie diese Argumente mit oder "" einschließen (auf denUnterschied zwischen und "" werden wir später zu sprechen kommen. In diesem Beispiel hat das Proggramm ls wieder drei Argumente, von denen die letzten beiden in Anführungsreichen gesetzt wurden. Im ersten Fall, weil das Argument Leerzeichen enthält (ohne Anführungszeichen hätte die Shell gedacht, dass es sich um 2 Argumente handeln würde. Im zeiten Fall waren die Anführungszeichen nötig, weil das Argument SOnderzeichen enthält, die sonst von der Shell interpretiert (und missverstanden) worden wären.
$ ls 'Hello World' '()-!-()' hallo
Wichtig: Wenn das Programm (hier ls) die Argumente übergeben bekommt, dann sind die Anführungszeichen dort nicht mehr anthalten. Sie werden nur benötigt, damit die Shell richtig versteht, was Sie meinen. Denn ohne die Anführungszeichen würde die Shell Sie falsch verstehen. Im Prinzip können Sie alle ihre Argumente immer in Anführungszeichen setzen, die Shell würde das nicht stören. Aber es ist nicht nötig, wenn es zu keinen Missverständnissen kommen kann.
Bevor wir uns mit Wildcards beschäftigen, lernen wir zunächst das Kommmando echo kennen.
Das Kommando echo sieht sich alle Argumente an, ud gibt sie wieder aus, alle in einer Zeile.
Hier wird das Kommando echo mit genau einem Argument aufgerufen
$ echo Eins Eins
Hier wird das Kommando echo mit 3 Argumenten aufgerufen
$ echo Eins Zwei Drei Eins Zwei Drei
Wie wir sehen, gibt echo alle Argumente aus. Das wird nützlich, weil wir als nächstes Wildcards benutzen werden, die die Shell (als Service für uns) in ein oder mehrere Argumente verwandelt, bevor sie das Kommando abarbeitet. Wollen wir sehen, durch was ie Shell unsere Wildcards ersetzt hat, knnen wir dafür das Kommando echo benutzen
Beispiel
$ ls -l foo.txt bar.txt file.jpg picture.jpg
$ echo *.txt foo.txt bar.txt
Das Programm echo bekommt die Wildcard *.txt nie zu sehen. Stattdessen ersetzt es die Shell durch (in diesem Fall 2) Dateinamen, die auf dieses Muster passen. Würde nur ein Dateiname auf das Muster passern, würde die Shell die Wildcard nur durch ein Argument ersetzen. Würden 1000 Dateinamen auf das Muster ersetzen, würde die Shell die Wildcard durch diese 1000 Argumente ersetzen. Für das Programm sieht es so aus, als ob wir die (in diesem Falll 1000) Atrgumente selbst in die Kommandozeile eingetragen hätten.