In der bash sind eine Reihe von Sonderzeichen definiert, die besondere Aktionen der Shell auslösen.
Diese Sonderzeichen sind
| Zeichen | Name | Dezimalcode | Oktalcode | Hexadezimalcode |
| blank-Zeichen | ||||
| <space> | Leerzeichen | 32 | 040 | 0x20 |
| <tab> | Tabulatorzeichen | 9 | 011 | 0x09 |
| meta-Zeichen | ||||
| ¦ | durchbrochener senkrechter Strich | 124 | 174 | 0x3C |
| & | Ampersand-Zeichen, kaufmännisches Und | 38 | 046 | 0x26 |
| ; | Semikolon | 59 | 073 | 0x3B |
| ( ) | öffnende und schliessende runde Klammer | 40 41 | 050 051 | 0x28 0x29 |
| < > | öffnende und schliessende spitze Klammer | 60 62 | 074 076 | 0x3C 0x3E |
| <space> | Leerzeichen | 32 | 040 | 0x20 |
| <tab> | Tabulatorzeichen | 9 | 011 | 0x09 |
| Quotungszeichen | ||||
| " | doppeltes Anführungszeichen | 34 | 042 | 0x22 |
| ' | einfaches Anführungszeichen | 39 | 047 | 0x27 |
| \ | backslash-Zeichen | 92 | 134 | 0x5C |
| Expansionszeichen | ||||
| $ | Dollarzeichen | 36 | 044 | 0x24 |
| ` | Back-qoute-Zeichen | 96 | 140 | 0x60 |
| ˜ | Tilde | 126 | 176 | 0x7E |
| { } | öffnende und schliessende geschweifte Klammer | 123 125 | 173 175 | 0x7B 0x7D |
| Kontrolloperatoren | ||||
| ¦ | durchbrochener senkrechter Strich | 124 | 174 | 0x3C |
| ¦¦ | doppelter durchbrochener senkrechter Strich | 124 | 174 | 0x3C |
| & | Ampersand-Zeichen, kaufmännisches Und | 38 | 046 | 0x26 |
| && | doppeltes Ampersand-Zeichen, kaufmännisches Und | 38 | 046 | 0x26 |
| ; | Semikolon | 59 | 073 | 0x3B |
| ;; | doppeltes Semikolon | 59 | 073 | 0x3B |
| ( ) | öffnende und schliessende runde Klammer | 40 41 | 050 051 | 0x28 0x29 |
| <newline> | Zeilenumbruch | 10 | 012 | 0x0A |
| Kommentarzeichen | ||||
| # | Doppelkreuz, Hash | 35 | 043 | 0x23 |
Dazu ein einfaches Beispiel:
Sie möchten die Datei mit dem Namen Mein Lebenslauf aus dem aktuellen Verzeichnis löschen und geben dazu den Befehl
rm Mein Lebenslauf
ein. Das Ergebnis wird in den meisten Fällen eine Fehlermeldung sein, die besagt, dass die Dateien Mein und Lebenslauf nicht existieren.
Noch schlimmer ist es, wenn zB. die Datei Lebenslauf wirklich existiert hat und nun gelöscht wurde.
Der Grund für diese Fehlermeldung ist recht einfach. Der Dateiname enthält ein Leerzeichen und dieses ist ein Sonderzeichen der bash.
Es dient dazu, die einzelnen Worte in der Kommandozeile voneinander zu trennen (word-splitting).
Die bash erkennt also nicht, dass das Leerzeichen ein Bestandteil des Dateinamens ist und geht davon aus, dass Sie zwei Dateien löschen möchten.
Es werden die beiden Parameter Mein und Lebenslauf an das Kommando rm übergeben und dieses reagiert im günstigsten Fall mit der oben genannten Fehlermeldung.
Das Leerzeichen muss also seiner Sonderbedeutung enthoben werden und das geschieht durch Quotungszeichen.
Diese Zeichen sind in der Lage, die Sonderbedeutung bestimmter Zeichen aufzuheben und damit die Sonderbehandlung dieser Zeichen durch die Shell zu verhindern.
Wird ein Zeichen gequotet, so wird es wie jedes andere ASCII-Zeichen behandelt.
Es dürfen auch Zeichen ohne Sonderbedeutung gequotet werden, dass hat dann keine weiteren Auswirkungen.
Wirkung der Quotungszeichen
Die Quotungszeichen wirken unterschiedlich stark.
| \ | backslash | ||||||||||||||||||||||||||
|
Ein nicht gequoteter backslash (\) ist der escape character. Der backslash hebt die Sonderbedeutung nur des folgenden Zeichens auf.
Sollen mehrere Zeichen gequotet werden, so ist jedem dieser Zeichen ein backslash voranzustellen.
Weiterhin können mit dem backslash auch nicht druckbare Zeichen erzeugt werden.
Eine besondere Bedeutung hat ein gequotetes <newline>, also die Zeichenkombination \<newline>, wobei der backslash nicht selbst gequotet sein darf. Diese escape-Sequenz bewirkt eine Fortsetzung der Eingabezeile auf der nächsten Terminalzeile. Der gequotete backslash wird dabei aus dem Datenstrom entfernt und ist effektiv nicht vorhanden. Damit kann die Eingabezeile auf mehrere Terminalzeilen ausgedehnt werden. |
|||||||||||||||||||||||||||
| ' | single quote, einfaches Anführungszeichen | ||||||||||||||||||||||||||
| Alle Zeichen und Worte, die zwischen den single quotes ' eingeschlossen sind, verlieren ihre Sonderbedeutung, ausgenommen der single-quote selbst. In einem mit single-quotes gequoteten String darf selbst kein ungequotetes single-quote enthalten sein. | |||||||||||||||||||||||||||
| " | double quote, doppeltes Anführungszeichen | ||||||||||||||||||||||||||
|
Alle Zeichen und Worte, die zwischen den double quotes " eingeschlossen sind, verlieren ihre Sonderbedeutung, ausgenommen $,`, " und \.
Die Zeichen $ und ` behalten ihre Bedeutung innerhalb der double quotes " bei.
Der backslash wirkt mit seiner Sonderbedeutung nur noch, wenn er von einem der Zeichen $, `, ", \, oder |
|||||||||||||||||||||||||||
#!/bin/bash
..........
rm ${DATEINAME}
.......... |
#!/bin/bash
..........
rm "${DATEINAME}"
.......... |
|
Sollte jemand seine Rechte durch eine Veröffentlichung auf dieser oder einer anderen meiner Seiten verletzt sehen, bitte ich um sofortige Kontaktaufnahme.
Ich werde die entsprechenden Inhalte umgehend entfernen.
Somit sind sowohl ein anwaltlicher Rat als auch eine kostenpflichtige Abmahnung nicht erforderlich!
Weiterhin weise ich darauf hin, dass der Inhalt verlinkter Seiten nicht in meiner redaktionellen Verantwortung liegt. |
www.schlaefendorf.de 2012