Befehlsersetzung: Unterschied zwischen den Versionen
Michi (Diskussion | Beiträge) |
Michi (Diskussion | Beiträge) Keine Bearbeitungszusammenfassung |
||
Zeile 73: | Zeile 73: | ||
Von linksgerichteten Hochkommas ( ` ) umschlossene Werte werden ausgeführt und die Shell ersetzt den geklammerten Ausdruck durch das Ergebnis, das der Programmaufruf liefert. | Von linksgerichteten Hochkommas ( ` ) umschlossene Werte werden ausgeführt und die Shell ersetzt den geklammerten Ausdruck durch das Ergebnis, das der Programmaufruf liefert. | ||
Löschen aller Dateien mit der Endung ".tmp" im aktuellen Verzeichnis. | Löschen aller Dateien mit der Endung ".tmp" im aktuellen Verzeichnis. |
Version vom 25. Januar 2009, 18:02 Uhr
Befehlsersetzung
Quoting
Umgekehrter Schrägstrich ( \ )
In manchen Fällen wird ein Zeichen mit vorangestelltem umgekehrtem Schrägstrich zu einem besonderen Zeichen (Escape-Sequenz), etwa bei Verwendung des Befehls echo oder bei Prompt-Zeichenketten.
Escape- Sequenz |
Beschreibung |
---|---|
\n | ("newline") Zeilenumbruch |
\u | ("username") Benutzername |
\w | ("current working directory") aktuelles Verzeichnis |
\\ | umgekehrter Schrägstrich |
In anderen Fällen verliert ein besonderes Zeichen durch den vorangestellten umgekehrten Schrägstrich seine Besonderheit. Viele Satzzeichen haben für die Shell eine besondere Bedeutung, z. B. die einfachen, die doppelten und die rückwärtsgerichteten Anführungszeichen, das Frage- und das Ausrufezeichen, das Dächlein, das Handels-und, der senkrechte Strich, der Stern, die runden, eckigen, spitzen und geschweiften Klammern, die Tilde und der Strichpunkt. Jedes dieser Zeichen kann auch literal behandelt werden. Es folgen einige Beispiele.
Befehl | Beschreibung |
---|---|
rm * | Löscht ohne Nachfrage alle Dateien (ausser die mit mit ein em Punkt beginnenden) im aktuellen Verzeichnis. |
rm \* | Löscht die Datei mit dem Namen "*". |
cat \! | Zeigt den Inhalt der Datei "!" an. |
Weil der umgekehrte Schrägstrich der Shell meistens mitteilt, dass sie das nachfolgende Zeichen literal behandeln soll, kann er auch dazu benutzt werden, der Shell mitzuteilen, dass die nächste Zeile Teil des selben Befehls ist.
$ echo one\ > two \ > three onetwo three
Die Shell ignoriert mehrere aufeinanderfolgende Leerzeichen und komprimiert sie automatisch zu einem einzelnen Leerzeichen.
$ echo one two one two
Einfache Anführungszeichen ( ' )
Einfache Anführungszeichen können verwendet werden, um find-, grep-, sed- und awk-Befehle davor zu schützen, von der Shell interpretiert zu werden.
Die einfachen Anführungszeichen verhindern, dass der Stern von der Shell interpretiert wird. Es werden also alle Dateien gefunden, deren Name aus inem Stern besteht.
$ find / -name '*' -print >& ~/allfiles.txt
Der Stern wird von der Shell interpretiert. Es werden also alle Dateien im aktuellen Verzeichnis gefunden.
$ find . -name * -print >& ~/allfiles.txt
Alle Zeichen zwischen einfachen Anführungszeichen (ausser den einfachen Anführungszeichen selbst) werden nicht interpretiert.
$ echo one two one two $ echo 'one two' one two $ echo 'three > > four > five `@#$%^\"[]' three four five `@#$%^\"[]'
Rückwärtsgerichtete Anführungszeichen ( ` )
Von linksgerichteten Hochkommas ( ` ) umschlossene Werte werden ausgeführt und die Shell ersetzt den geklammerten Ausdruck durch das Ergebnis, das der Programmaufruf liefert.
Löschen aller Dateien mit der Endung ".tmp" im aktuellen Verzeichnis.
$ rm `find -name "*.tmp" -print` oder besser: $ find -name "*.tmp" -print $ rm `!!`
...
$ echo Dieses Verzeichnis enthält `ls | wc -l` Dateien. Dieses Verzeichnis enthält 14 Dateien.
...
$ echo Dieses Verzeichnis enthält `ls \`pwd\` | wc -l` Dateien. Dieses Verzeichnis enthält 14 Dateien.
oder (unter der Korn-Shell und in der Bash)
$ echo Dieses Verzeichnis enthält `ls $(pwd) | wc -l` Dateien. Dieses Verzeichnis enthält 14 Dateien.
Interpretation geklammerter Metazeichen
Erklärung zu den Metazeichen: "T" steht für Terminator, "J" für interpretierte Zeichen, "N" für Zeichen, die nicht interpretiert werden.
Klammer | Metazeichen | Beschreibung | |||||
---|---|---|---|---|---|---|---|
' | " | ` | \ | $ | * | ||
'...' | T | N | N | N | N | N | Von einfachen (rechtsgerichteten) Hochkommas (') umschlossene Variablen werden nicht expandiert.
$ echo 'Hallo $k heute am `date` arbeiten $(who | wc -l) Benutzer' Hallo $k heute am `date` arbeiten $(who | wc -l) Benutzer Mit dem folgenden Befehl erhält der Shell-Prompt die Zeichenkette $ dummy@linux:~> PS1='${PWD} % ' /home/dummy % |
"..." | N | T | J | J | J | N | Von doppelten Hochkommas (") umschlossene Variablen werden expandiert, also durch ihren Wert ersetzt.
$ echo "Hallo $k heute am `date` arbeiten $(who | wc -l) Benutzer" Hallo heute am Mit Apr 2 22:27:57 CEST 2003 arbeiten 2 Benutzer Die Zeichenkette $ PS1="${PWD} $ " |
`...` oder $(...) |
N | N | T | J | N | N | Von linksgerichteten Hochkommas ( ` ) umschlossene Werte werden ausgeführt und die Shell ersetzt den geklammerten Ausdruck durch das Ergebnis, das der Programmaufruf liefert.
Der Wert der Variable "HOSTNAME" wird durch das Ergebnis des Befehls "/bin/hostname" ersetzt. $ HOSTNAME=`/bin/hostname` Eine neuere Schreibweise mit demselben Ergebnis ist die folgende. $ HOSTNAME=$(/bin/hostname) |
Weblinks
- Command substitution (TLDP.org)