Variablen-Substitutionen: Unterschied zwischen den Versionen
Zur Navigation springen
Zur Suche springen
Keine Bearbeitungszusammenfassung |
|||
| Zeile 1: | Zeile 1: | ||
= Variablen-Substitution = | |||
== Was ist eine Variablen-Substitution == | == Was ist eine Variablen-Substitution == | ||
*Unter Variablen-Substitution versteht man das Ersetzen eines Variablennamens durch seinen aktuellen Wert. | *Unter Variablen-Substitution versteht man das Ersetzen eines Variablennamens durch seinen aktuellen Wert. | ||
*Dies geschieht zur Laufzeit durch die Shell, bevor der Befehl tatsächlich ausgeführt wird. | *Dies geschieht zur Laufzeit durch die Shell, bevor der Befehl tatsächlich ausgeführt wird. | ||
| Zeile 8: | Zeile 9: | ||
*Variablen werden in Bash ohne Datentypen definiert. | *Variablen werden in Bash ohne Datentypen definiert. | ||
*Eine Zuweisung erfolgt durch ein Gleichheitszeichen ohne Leerzeichen. | *Eine Zuweisung erfolgt durch ein Gleichheitszeichen ohne Leerzeichen. | ||
;Beispiele | ;Beispiele | ||
*GLAS=bier | * GLAS=bier | ||
*ORDNER=/etc | * ORDNER=/etc | ||
== Ausgabe von Variablen == | == Ausgabe von Variablen == | ||
*Zur Ausgabe des Inhalts einer Variablen wird vor ihren Namen ein Dollarzeichen ($) gesetzt. | *Zur Ausgabe des Inhalts einer Variablen wird vor ihren Namen ein Dollarzeichen ($) gesetzt. | ||
*Die Shell ersetzt den Variablennamen durch dessen Wert. | *Die Shell ersetzt den Variablennamen durch dessen Wert. | ||
;Beispiele | ;Beispiele | ||
*echo $GLAS → bier | * echo $GLAS → bier | ||
*echo $ORDNER → /etc | * echo $ORDNER → /etc | ||
== Verwendung in Befehlen == | == Verwendung in Befehlen == | ||
*Variablen können direkt in Befehlen eingesetzt werden. | *Variablen können direkt in Befehlen eingesetzt werden. | ||
*Die Shell ersetzt dabei die Variable durch ihren Wert, bevor der Befehl ausgeführt wird. | *Die Shell ersetzt dabei die Variable durch ihren Wert, bevor der Befehl ausgeführt wird. | ||
;Beispiel | ;Beispiel | ||
*UNIXSYSTEM=/usr | * UNIXSYSTEM=/usr | ||
*ls -ld $UNIXSYSTEM | * ls -ld $UNIXSYSTEM | ||
drwxr-xr-x 11 root root 4096 /usr | drwxr-xr-x 11 root root 4096 /usr | ||
| Zeile 30: | Zeile 34: | ||
*Zur eindeutigen Abgrenzung von Variablen in komplexen Ausdrücken werden geschweifte Klammern verwendet. | *Zur eindeutigen Abgrenzung von Variablen in komplexen Ausdrücken werden geschweifte Klammern verwendet. | ||
*Dies ist vor allem dann nötig, wenn Zeichen direkt an den Variablennamen anschließen. | *Dies ist vor allem dann nötig, wenn Zeichen direkt an den Variablennamen anschließen. | ||
;Beispiele | |||
* SUX=eins | |||
* TUX=zwei | |||
* SUXTUX=drei | |||
* echo $SUXTUX → drei | |||
* echo ${SUX}TUX → einsTUX | |||
* echo ${SUX}${TUX} → einszwei | |||
== Erweiterte Parameterexpansion == | |||
*Mit Hilfe der Parameterexpansion können Variableninhalte geprüft, verändert oder ergänzt werden. | |||
*Diese Mechanismen werden direkt von der Shell verarbeitet und sind sehr effizient. | |||
;Beispiele | ;Beispiele | ||
* | * ${FARBE:-rot} – Standardwert, wenn nicht gesetzt | ||
* | * ${FARBE:=rot} – wie oben, zusätzlich wird FARBE belegt | ||
* | * ${FARBE:?keine farbe} – Fehlermeldung, wenn FARBE nicht definiert | ||
* | * ${FARBE:+rot} – liefert „rot“, wenn FARBE definiert ist | ||
* | * ${FARBE:3} – Ausgabe ab Position 3 | ||
* | * ${FARBE:5:3} – Ausgabe von 3 Zeichen ab Position 5 | ||
* ${#FARBE} – Länge der Variablen | |||
* ${FARBE#rot} – entfernt „rot“ am Anfang | |||
* ${PROGRAM##*/} – entfernt längstmöglich alles bis zum letzten Slash | |||
* ${FARBE%weis} – entfernt „weis“ am Ende | |||
* ${FARBE%%o*} – entfernt längstmöglich ab „o“ | |||
* ${FARBE/rot/blau} – ersetzt erstes „rot“ durch „blau“ | |||
* ${FARBE//rot/blau} – ersetzt alle „rot“ durch „blau“ | |||
== Wichtige Hinweise == | == Wichtige Hinweise == | ||
| Zeile 42: | Zeile 66: | ||
*Großbuchstaben werden oft für benutzerdefinierte Variablen verwendet. | *Großbuchstaben werden oft für benutzerdefinierte Variablen verwendet. | ||
*Bash führt die Substitution vor der Ausführung eines Befehls durch. | *Bash führt die Substitution vor der Ausführung eines Befehls durch. | ||
*Nicht gesetzte Variablen werden durch einen leeren String ersetzt. | *Nicht gesetzte Variablen werden durch einen leeren String ersetzt. | ||
= Aufgaben = | = Aufgaben = | ||
| Zeile 49: | Zeile 73: | ||
*Definieren Sie eine Variable '''VERZ''' mit einem Pfad und lassen Sie mit '''ls -l $VERZ''' deren Inhalt anzeigen. | *Definieren Sie eine Variable '''VERZ''' mit einem Pfad und lassen Sie mit '''ls -l $VERZ''' deren Inhalt anzeigen. | ||
*Erstellen Sie zwei Variablen und kombinieren Sie sie in einer dritten Variablen. | *Erstellen Sie zwei Variablen und kombinieren Sie sie in einer dritten Variablen. | ||
*Testen Sie den Unterschied zwischen '''$VARI''' und '''${VARI}TEXT'''. | *Testen Sie den Unterschied zwischen '''$VARI''' und '''${VARI}TEXT'''. | ||
*Erklären Sie die Funktionsweise von '''${FARBE:-rot}''' und '''${FARBE:=rot}'''. | |||
*Erstellen Sie ein Beispiel, bei dem '''${PROGRAM##*/}''' den Dateinamen aus einem Pfad extrahiert. | |||
Version vom 17. Oktober 2025, 14:59 Uhr
Variablen-Substitution
Was ist eine Variablen-Substitution
- Unter Variablen-Substitution versteht man das Ersetzen eines Variablennamens durch seinen aktuellen Wert.
- Dies geschieht zur Laufzeit durch die Shell, bevor der Befehl tatsächlich ausgeführt wird.
- Variablen dienen der Speicherung und Wiederverwendung von Werten, z. B. Texten, Zahlen oder Pfaden.
Definition und Zuweisung
- Variablen werden in Bash ohne Datentypen definiert.
- Eine Zuweisung erfolgt durch ein Gleichheitszeichen ohne Leerzeichen.
- Beispiele
- GLAS=bier
- ORDNER=/etc
Ausgabe von Variablen
- Zur Ausgabe des Inhalts einer Variablen wird vor ihren Namen ein Dollarzeichen ($) gesetzt.
- Die Shell ersetzt den Variablennamen durch dessen Wert.
- Beispiele
- echo $GLAS → bier
- echo $ORDNER → /etc
Verwendung in Befehlen
- Variablen können direkt in Befehlen eingesetzt werden.
- Die Shell ersetzt dabei die Variable durch ihren Wert, bevor der Befehl ausgeführt wird.
- Beispiel
- UNIXSYSTEM=/usr
- ls -ld $UNIXSYSTEM
drwxr-xr-x 11 root root 4096 /usr
Substitution mit geschweiften Klammern
- Zur eindeutigen Abgrenzung von Variablen in komplexen Ausdrücken werden geschweifte Klammern verwendet.
- Dies ist vor allem dann nötig, wenn Zeichen direkt an den Variablennamen anschließen.
- Beispiele
- SUX=eins
- TUX=zwei
- SUXTUX=drei
- echo $SUXTUX → drei
- echo ${SUX}TUX → einsTUX
- echo ${SUX}${TUX} → einszwei
Erweiterte Parameterexpansion
- Mit Hilfe der Parameterexpansion können Variableninhalte geprüft, verändert oder ergänzt werden.
- Diese Mechanismen werden direkt von der Shell verarbeitet und sind sehr effizient.
- Beispiele
- ${FARBE:-rot} – Standardwert, wenn nicht gesetzt
- ${FARBE:=rot} – wie oben, zusätzlich wird FARBE belegt
- ${FARBE:?keine farbe} – Fehlermeldung, wenn FARBE nicht definiert
- ${FARBE:+rot} – liefert „rot“, wenn FARBE definiert ist
- ${FARBE:3} – Ausgabe ab Position 3
- ${FARBE:5:3} – Ausgabe von 3 Zeichen ab Position 5
- ${#FARBE} – Länge der Variablen
- ${FARBE#rot} – entfernt „rot“ am Anfang
- ${PROGRAM##*/} – entfernt längstmöglich alles bis zum letzten Slash
- ${FARBE%weis} – entfernt „weis“ am Ende
- ${FARBE%%o*} – entfernt längstmöglich ab „o“
- ${FARBE/rot/blau} – ersetzt erstes „rot“ durch „blau“
- ${FARBE//rot/blau} – ersetzt alle „rot“ durch „blau“
Wichtige Hinweise
- Zwischen Variablenname, Gleichheitszeichen und Wert dürfen keine Leerzeichen stehen.
- Großbuchstaben werden oft für benutzerdefinierte Variablen verwendet.
- Bash führt die Substitution vor der Ausführung eines Befehls durch.
- Nicht gesetzte Variablen werden durch einen leeren String ersetzt.
Aufgaben
- Definieren Sie eine Variable NAME mit einem beliebigen Wert und geben Sie diesen mit echo aus.
- Definieren Sie eine Variable VERZ mit einem Pfad und lassen Sie mit ls -l $VERZ deren Inhalt anzeigen.
- Erstellen Sie zwei Variablen und kombinieren Sie sie in einer dritten Variablen.
- Testen Sie den Unterschied zwischen $VARI und ${VARI}TEXT.
- Erklären Sie die Funktionsweise von ${FARBE:-rot} und ${FARBE:=rot}.
- Erstellen Sie ein Beispiel, bei dem ${PROGRAM##*/} den Dateinamen aus einem Pfad extrahiert.