Normalerweise besitzen einige Zeichen oder -sequenzen für Kommando-Shells eine besondere Bedeutung, wenn sie Ihre Eingabe liest. Sie ersetzt bestimmte Zeichenkombinationen nach bestimmten Regeln – wie Expansion – durch andere Zeichenketten. „Quoting“ ist ein Mechanismus, diese Ersetzungen zu verhindern oder die Art der Interpretation zu bestimmen bzw. zu verändern.
Das „Quoting“ ist Teil der Token-Bildung, das heißt des Aufbrechen der Eingabe-Zeichenkette für die Kommando-Shell in Worte und Operatoren. Es folgt direkt nach dem Einlesen einzelner Zeichen. Eine weitere Interpretation hat zu diesem Zeitpunkt also noch nicht stattgefunden. Bestimmung von Kommandos, Pipelines oder Listen – und erst recht die Ausführung – findet also erst danach statt.
Die Bash unterscheidet zwischen unterschiedlichen Arten des „Quoting“:
- Fluchtsymbol (Escape Character) – Die Interpretation eines einzelnen Zeichens verhindern.
- Einfache Anführungszeichen (Single Quotes) – Sämtliche Interpretation der Zeichen verhindern, die durch sie umschlossen sind.
- Doppelte Anführungszeichen (Double Quotes) – Einige Interpretationen der Zeichen verhindern, die durch sie umschlossen sind.
- ANSI-C Zeichenketten (ANSI-C Quoting) – Die Zeichenkette wird als ANSI-C formatierte Zeichenkette interpretiert.
- Sprachliche Übersetzung (Local Translation) – Die Zeichenkette wird in eine bestimmte Sprache übersetzt.
Fluchtsymbol
Das \-Zeichen verhindert die besondere Bedeutung eines einzelnen Zeichens, das direkt auf dieses Fluchtsymbol folgt. Das darauf folgende Zeichen so von der Shell nicht weiter interpretiert. Das ist zum Beispiel sinnvoll, wenn man eine Datei bearbeiten möchte, deren Dateiname ein Leerzeichen enthält. Setzt man vor das Leerzeichen das Fluchtsymbol (\), so wird die besondere Bedeutung des Leerzeichens – Wörter zu trennen – verhindert. Selbst die besondere Bedeutung des newline
-Zeichens ist aufgehoben. Wenn ein ‚\‘-Zeichen am Ende einer Zeile steht, so bedeutet dies, dass die darauf folgende Zeile eine Fortsetzung der vorhergehenden ist.
iTouch:example bubi$ mkdir Eigene Dateien
iTouch:example bubi$ ls -l
total 0
drwxr-xr-x 2 bubi staff 64 Nov 25 19:16 Dateien
drwxr-xr-x 2 bubi staff 64 Nov 25 19:16 Eigene
iTouch:example bubi$ mkdir Eigene\ Dateien
iTouch:example bubi$ ls -l
total 0
drwxr-xr-x 2 bubi staff 64 Nov 25 19:16 Dateien
drwxr-xr-x 2 bubi staff 64 Nov 25 19:16 Eigene
drwxr-xr-x 2 bubi staff 64 Nov 25 19:16 Eigene Dateien
iTouch:example bubi$ ls -l |\
> grep E.*\ D
drwxr-xr-x 2 bubi staff 64 Nov 25 19:16 Eigene Dateien
iTouch:example bubi$
Einfache Anführungszeichen
Zeichenketten, die in einfachen Anführungszeichen umschlossen sind, werden von der Shell nicht weiter interpretiert die einzige Ausnahme ist das ANSI-C Quoting (siehe unten). Innerhalb einer so umschlossenen Zeichenkette darf kein einfaches Anführungszeichen stehen.
iTouch:example bubi$ echo $PATH
/opt/local/bin:/opt/local/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/go/bin:/usr/local/MacGPG2/bin:/opt/X11/bin:/Applications/Wireshark.app/Contents/MacOS
iTouch:example bubi$ echo '$PATH'
$PATH
iTouch:example bubi$
Doppelte Anführungszeichen
Werden Zeichenketten in doppelte Anführungszeichen gesetzt, so werden sie nicht weiter interpretiert mit Ausnahme der folgenden Zeichen: $, `, \ und in bestimmten Fällen auch das Ausrufezeichen (!). Das Fluchtsymbol (\) besitzt seine Bedeutung nur noch im Zusammenhang mit $, `, " und dem newline
-Zeichen. Wird es vor diesen Zeichen angetroffen, so wird es von der Shell einfach aus der Zeichenkette entfernt. Das darauf folgende Zeichen verliert seine besondere Bedeutung. Steht es vor einem anderen Zeichen so wird es als Text interpretiert ohne besondere Bedeutung. Ein doppeltes Anführungszeichen kann direkt nach dem Fluchtsymbol auch innerhalb der Zeichenkette auftreten.
iTouch:example bubi$ echo "Die Variable \$PATH hat folgenden Inhalt: \"$PATH\""
Die Variable $PATH hat folgenden Inhalt: "/opt/local/bin:/opt/local/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/go/bin:/usr/local/MacGPG2/bin:/opt/X11/bin:/Applications/Wireshark.app/Contents/MacOS"
iTouch:example bubi$
ANSI-C Zeichenketten
Wird einer Zeichenkette, die durch einfache Anführungszeichen umschlossen ist, direkt das $-Zeichen vorangestellt, so werden ANSI-C Ersetzungen durchgeführt. Die resultierende wird Zeichenkette gebildet, indem bestimmte Zeichen, denen das Fluchtsymbol (\) vorangestellt wird (Escape Sequenz), nach dem ANSI-C Standard interpretiert werden. Nach der Transformation bleibt die Zeichenkette mit den einfachen Anführungszeichen umschlossen.
Folgende Escape Sequenzen werden verarbeitet:
\a | Ein kurzes Tonsignal (Glocke) wird gegeben |
\b | Der Cursor wird ein Zeichen nach links gerückt (Backspace) |
\e bzw.\E | Das ASCII Escape-Zeichen |
\f | Das Formfeed-Zeichen |
\n | Das Zeilenumbruch-Zeichen (New Line) |
\r | Das Wagenrücklauf-Zeichen: (Carridge Return) |
\t | Der horizontale Tabulator (TAB) |
\v | Der vertikale Tabulator (VTAB) |
\\ | Das Zeichen \ |
\' | Das einfache Anführungszeichen |
\" | Das doppelte Anführungszeichen |
\nnn | Der Buchstabe mit dem oktalen Kode nnn |
\xHH | Der Buchstabe mit dem hexadezimalen Kode HH |
\uHHHH | Der Buchstabe mit dem UNICODE HHHH |
\UHHHHHHHH | Der Buchstabe mit dem UNICODE HHHHHHHH |
\xc | Das Zeichen Strg-x |
iTouch:example bubi$ echo $'das Zeichen \u03BB'
das Zeichen λ
iTouch:example bubi$
Sprachliche Übersetzungen
Durch doppelte Anführungszeichen umschlossene Zeichenketten, denen direkt ein $-Zeichen vorangestellt wird, werden durch die der Zeichenkette zugeordnete sprachliche Übersetzung der Zeichenkette ersetzt. Die übersetzte Zeichenkette bleibt jedoch von Anführungszeichen umschlossen. Der Übersetzungsmechanismus wird durch die Variablen LOCALE
, LC_MESSAGES
und in manchen Systemen durch TEXTDOMAINDIR
und TEXTDOMAIN
bestimmt. Der sprachlichen Übersetzungsfunktion wird zu gegebener Zeit ein eigener Artikel gewidmet werden.