UnixTools01 12
Argumente mit Sonderzeichen
Alles war hinter dem Kommandonamen steht, durch Leerzeichen getrennt, sind die Argumente mit denen das Programm aufgerufen wird (ob die Trennung durch ein oder mehrere Leerzeichen erfolgt, ist egal). Das diese Argumente für das Programm bedeuten, was es also damit macht, hängt vom Programm ab. Rufen Sie das Programm mit --help auf, und in den meisten Fällen werden sie eine kurz und bündige Auskunft erhalten. Oft ist es so, dass Argumente, die mit einem Minuszeichen - beginnen, also z.B. -l beim Kommando ls lediglich seine Information an das Programm sind, sich auf eine bestimmte Weise zu verhalten (zum Beispiel eine lange/vollständige Ausgabe zu erzeugen, statt nur einer kurzen). Diese Art von Argumenten nennen wir auch Option. Andere Argumente sind oft Dateinamen, wie zum Beispiel datei.txt bei ls -l datei.txt. Oder es sind einfach nur Zeichenketten, wie Hello und World bei dem Kommando echo Hello World.
Leerzeichen
Enthält das Argument ein (oder mehrere) Leerzeichen, gibt es ein Problem, denn die Shell würde denken, dass es sich um mehreer Worte handelt. Um zu erkennen zu geben, dass die Zeichen zu einem einzigen Argument gehören, schließen wir sie in Anführungszeichen ein.
$ echo "Hello World" Hello World $ echo 'Hello World' Hello World
In beiden fällen erhält das Programm echo nur ein einziges Argument (weldches ein Leerzeichen enthält). Hätten wir die Anführungszeichen nicht geschrieben, hätte die Shell gedacht, dass sie das Programm echo mt zwei Argumenten aufrufen soll, nämlich mit Hello (erstes Argument) und World (zweites Argument). Was das Ergebnis angeht, würde das zwar im Fall des Programms echo keinen so großen Unzterschied machen. Aber denken wir an das Programmm touch, dass Dateien erzeugt, so würde
$ touch Hello World
zwei Dateien erzeugen, wohingegen
$ touch 'Hello World'
nur eine Datei erzeugen würde (mit einem Dateinamen, der ein Leerzeichen enthält - was in der Regel keine so gute Idee ist, aber möglich).
Übrigens: Es gibt einen Unterschied zwischen den Anfühungszeichen und "", auf dne wir aber erst später eigehen werden, wenn wir Shell-Variablen ($PATH, $ENV, ...) kennen gelernt haben.
Sonderzeichen
Enthält ein Argument Sonderzeichen, also zum Beispiel *, &, im Prinzip alles, was kein Buchstabe und keine Zahl ist, dann sollt das Argument mit Anführungszeichen eingeschlossen werden
Einschliessen in Anführungszeichen ' und "
$ touch 'Woom!*!'
Erzeugt eine Datei mit dem Namen Woom!*!. Benennen Sie Ihre Dateien nicht so! Sie werden nur Ärger damit haben.
Außer die ganze Zeichenkette in Anführungszeichen einzuschließen gibt es auch die Möglichkeit, einem einzelnen Zeichen ein \\ voranzustellen. Damit verliert das nachfolgende Zeichen (und nur dieses, und nur an dieser einen Stelle) seine Sonderbedeutung für die Shell
Escape mit \
$ touch a\*b
würde eine Datei mit dem Namen a*b erzeugen, weil der * keien Bedeutung für die Shell hätte (weil davor ein \ steht).
Was, wenn Sie ein \ eingeben wollen? Dann müssen Sie diesem ebenfalls ein \ voranstellen, damit es seine Sonderbedeutung verliert
$ echo \\ \
gibt also genau (nur) das zeichen \ aus. Die Shell sieht zunächst das erste \, und versteht, dass sie das nachfolgende Zeichen (das zweite \) so übernehmen soll, wie es dort steht. Die Shell ruft das Programm echo also mit nur einem Argument auf, in dem nur ein Zeichen steht, das eine \ .
Vielleicht beginnen Sie schon zu erahnen, dass es eine gute Idee ist, ohne Not in Argumenten Zeichen zu verwenden, die eine Bedeutung für die Shell haben. Das gleiche gilt für Buchstaben aus fremden Alphabeten. Es ist mglich, und es gibt klare Regeln, die, wenn Sie sie einhalten, immer zum gewünschten Ergebnis führen. Aber wahrscheinlich erschaffen Sie damit nur zusätzliche Mglichkeiten, Fehler zu machen. Also vermeiden Sie es, wenn es irgend möglich ist.
Q&E:
- Legen Sie eine Datei an, die 'Hello World!" heisst (mit Leerzeichen), und löschen Sie diese Datei anschliessend wieder.
- Legen Sie zwei Dateien an, eine mit den NAmen a und eine mit dem Namen *. Danach lschen Sie die Datei mit dem Namen *, aber bitte so, dass es die Datei mit den Manen a danach noch gibt.
- Legen Sie im aktuellen Verzeichnis eine Datei an, die --help heisst, und läschen diese danach wieder.
- Versuchen Sie eine Datei anzulegen, die "///A///' heist.