Unix / Linux - Shell-Anführungsmechanismen
In diesem Kapitel werden wir detailliert auf die Shell-Anführungsmechanismen eingehen. Wir werden zunächst die Metazeichen diskutieren.
Die Metazeichen
Unix Shell bietet verschiedene Metazeichen, die bei der Verwendung in einem beliebigen Shell-Skript eine besondere Bedeutung haben und die Beendigung eines Wortes bewirken, sofern nicht anders angegeben.
Zum Beispiel, ? stimmt mit einem einzelnen Zeichen überein, während Dateien in einem Verzeichnis und einem Verzeichnis aufgelistet werden *entspricht mehr als einem Zeichen. Hier ist eine Liste der meisten Shell-Sonderzeichen (auch Metazeichen genannt) -
* ? [ ] ' " \ $ ; & ( ) | ^ < > new-line space tab
Ein Zeichen kann zitiert werden (dh für sich selbst stehen), indem ihm ein vorangestellt wird \.
Beispiel
Das folgende Beispiel zeigt, wie a gedruckt wird * oder ein ? - -
#!/bin/sh
echo Hello; Word
Bei der Ausführung erhalten Sie folgendes Ergebnis:
Hello
./test.sh: line 2: Word: command not found
shell returned 127
Versuchen wir nun, ein Anführungszeichen zu verwenden -
#!/bin/sh
echo Hello\; Word
Bei der Ausführung erhalten Sie folgendes Ergebnis:
Hello; Word
Das $ Das Zeichen ist eines der Metazeichen, daher muss es angegeben werden, um eine besondere Behandlung durch die Shell zu vermeiden.
#!/bin/sh
echo "I have \$1200"
Bei der Ausführung erhalten Sie folgendes Ergebnis:
I have $1200
In der folgenden Tabelle sind die vier Arten von Zitaten aufgeführt:
Sr.Nr. | Zitat & Beschreibung |
---|---|
1 | Single quote Alle Sonderzeichen zwischen diesen Anführungszeichen verlieren ihre besondere Bedeutung. |
2 | Double quote Die meisten Sonderzeichen zwischen diesen Anführungszeichen verlieren mit diesen Ausnahmen ihre besondere Bedeutung -
|
3 | Backslash Jedes Zeichen, das unmittelbar auf den Backslash folgt, verliert seine besondere Bedeutung. |
4 | Back quote Alles zwischen Anführungszeichen wird als Befehl behandelt und ausgeführt. |
Die einfachen Zitate
Stellen Sie sich einen Echo-Befehl vor, der viele spezielle Shell-Zeichen enthält.
echo <-$1500.**>; (update?) [y|n]
Ein Backslash vor jedes Sonderzeichen zu setzen ist mühsam und macht das Lesen der Zeile schwierig -
echo \<-\$1500.\*\*\>\; \(update\?\) \[y\|n\]
Es gibt eine einfache Möglichkeit, eine große Gruppe von Zeichen zu zitieren. Setzen Sie ein einfaches Anführungszeichen (') am Anfang und am Ende der Zeichenfolge -
echo '<-$1500.**>; (update?) [y|n]'
Zeichen in einfachen Anführungszeichen werden so zitiert, als ob sich vor jedem Zeichen ein Backslash befindet. Damit wird der Echo-Befehl ordnungsgemäß angezeigt.
Wenn ein einzelnes Anführungszeichen in einer auszugebenden Zeichenfolge angezeigt wird, sollten Sie nicht die gesamte Zeichenfolge in einfache Anführungszeichen setzen, sondern einen Backslash (\) wie folgt verwenden:
echo 'It\'s Shell Programming
Die doppelten Anführungszeichen
Versuchen Sie, das folgende Shell-Skript auszuführen. Dieses Shell-Skript verwendet ein einfaches Anführungszeichen -
VAR=ZARA
echo '$VAR owes <-$1500.**>; [ as of (`date +%m/%d`) ]'
Bei der Ausführung erhalten Sie folgendes Ergebnis:
$VAR owes <-$1500.**>; [ as of (`date +%m/%d`) ]
Dies musste nicht angezeigt werden. Es ist offensichtlich, dass einfache Anführungszeichen die Substitution von Variablen verhindern. Wenn Sie Variablenwerte ersetzen und Anführungszeichen wie erwartet funktionieren lassen möchten, müssen Sie Ihre Befehle wie folgt in doppelte Anführungszeichen setzen:
VAR=ZARA
echo "$VAR owes <-\$1500.**>; [ as of (`date +%m/%d`) ]"
Bei der Ausführung erhalten Sie folgendes Ergebnis:
ZARA owes <-$1500.**>; [ as of (07/02) ]
Doppelte Anführungszeichen entfernen die besondere Bedeutung aller Zeichen mit Ausnahme der folgenden:
$ zur Parametersubstitution
Backquotes für die Befehlsersetzung
\$ buchstäbliche Dollarzeichen zu ermöglichen
\` um wörtliche Anführungszeichen zu aktivieren
\" um eingebettete doppelte Anführungszeichen zu aktivieren
\\ um eingebettete Backslashes zu aktivieren
Alle Anderen \ Zeichen sind wörtlich (nicht speziell)
Zeichen in einfachen Anführungszeichen werden so zitiert, als ob sich vor jedem Zeichen ein Backslash befindet. Dies hilft bei der korrekten Anzeige des Echo-Befehls.
Wenn ein einzelnes Anführungszeichen in einer auszugebenden Zeichenfolge angezeigt wird, sollten Sie nicht die gesamte Zeichenfolge in einfache Anführungszeichen setzen, sondern einen Backslash (\) wie folgt verwenden:
echo 'It\'s Shell Programming'
Die Backquotes
Einen beliebigen Shell-Befehl dazwischen setzen backquotes führt den Befehl aus.
Syntax
Hier ist die einfache Syntax zum Einfügen einer beliebigen Shell command zwischen den Anführungszeichen -
var=`command`
Beispiel
Das date Der Befehl wird im folgenden Beispiel ausgeführt und das erzeugte Ergebnis wird in der Variablen DATA gespeichert.
DATE=`date`
echo "Current Date: $DATE"
Bei der Ausführung erhalten Sie folgendes Ergebnis:
Current Date: Thu Jul 2 05:28:45 MST 2009