UnixTools01 06
Wildcards
Wildcards haben etwas mit den Argumenten zu tun, die wir für Kommandos angeben können. Wildcards werden von der Shell erkannt, analysiert und duch "passende" Argumente ersetzt.
Argumente - Argumente von Shell-Kommandos
Viele Shell Kommandos besitzen Argumente, die wir, durch Leerzeichen voneinander getrennt, hinter das Kommando schreiben.
$ ls file1 file2 file3
Im obigen Beispiel hat das Kommando ls drei Argumente, nämlich file1, file2 und 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. Manchmal benötigen wir spezielle Notationen um die Argumente hinzuschreiben, damit die Shell richtig versteht, was wir meinen.
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 den Unterschied zwischen und "" werden wir später zu sprechen kommen).
$ ls 'Hello World' '()-!-()' hallo
Im obigen Beispiel hat das Proggramm ls wieder drei Argumente, von denen die ersten beiden in Anführungsreichen gesetzt wurden. Täten wir das nicht, würde die Shell unsere Eingabe missverstehen. Im ersten Fall, weil das Argument Leerzeichen enthält. 'Hello World' ist ein Argument. 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. Das dritte Argument muss nicht in Anführungszeichen geschrieben werden, weil es daran nichts falsch zu erstehen gibt. Im Prinzip können wir alle Argumente immer in Anführungszeichen setzen, die Shell würde das nicht stören. Aber es meist nicht nötig, und dann sparen wir uns die Tipparbeit.
Wichtig: Wenn die Shell das Programm (hier ls) startet und ihm die Argumente übergibt, dann sind die Anführungszeichen dort nicht mehr anthalten. Die Anführungszeichen werden nur bei der Notation des Arguments (in der Kommunikatio mit der Shell) benötigt. Die Shel entfernt sie automatisch.
Eine weitere Sonder-Notation für Argumente sind WildCards. Sie werden von der Shell nicht an das Programm übergeben, so wie wir sie hingeschrieben haben, sondern WildCards werden von der Shell durch "richtige Argumente" ersetzt, und diese werden dann dem aufgerufenen Programm übergeben. Das heisst, dass aufgerufene Programm sieht die WildCards nicht. Die Shell sieht die WildCards, ersetzt sie durch ein oder mehrere Argumente und ruft das Programm dann mit diesen Argumenten auf.
echo
Lernen wir zunächst das Kommmando echo kennen. Das Kommando echo sieht sich alle Argumente an, und gibt sie sofort wieder aus, alle in einer Zeile. Daher der Name echo.
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. Genausoviele Argumente, wie ihm übergeben wirden, und jedes für sich, ohne Veränderung. Falls Sie sich bei einem komplizierten Kommando also einmal nicht sicher sind, was die Shell daraus macht, dann schrieben Sie echo davor und sie sehen, was die Shell aus Ihrer Eingabe machen würde.
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.