Variablen-Substitutionen: Unterschied zwischen den Versionen
Zur Navigation springen
Zur Suche springen
(Die Seite wurde neu angelegt: „= Variablen allgemein = *In der Bash-Shell können Variablen verwendet werden, um Daten zu speichern und auf sie zuzugreifen. *Eine Variable wird mit einem N…“) |
|||
| (9 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
| Zeile 1: | Zeile 1: | ||
| − | = Variablen | + | = 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“ | ||
= Feldvariablen (Arrays) = | = Feldvariablen (Arrays) = | ||
| − | *In Bash können Arrays verwendet werden, um mehrere Werte unter einem gemeinsamen Namen zu speichern. | + | * In Bash können Feldvariablen (Arrays) verwendet werden, um mehrere Werte unter einem gemeinsamen Namen zu speichern. |
| − | *Arrays werden über Indizes angesprochen und erlauben den Zugriff auf | + | * Arrays werden über Indizes angesprochen und erlauben den Zugriff auf mehrere Elemente innerhalb einer Variablen. |
| − | + | == Definition == | |
| − | *farbe=(blau gelb gruen rot) | + | * '''farbe=(blau gelb gruen rot)''' |
| − | + | ==Defnition einer Wertes == | |
| − | * | + | * '''farbe[4]=silber''' |
| − | |||
| − | |||
| − | |||
| + | == Ausgabe einzelner Elemente == | ||
| + | * '''echo ${farbe[0]}''' → blau | ||
| + | * '''echo ${farbe[1]}''' → gelb | ||
| + | * '''echo ${farbe[2]}''' → gruen | ||
| + | * '''echo ${farbe[3]}''' → rot | ||
= Assoziative Arrays = | = Assoziative Arrays = | ||
| − | *Assoziative Arrays sind Schlüssel/Wert-Paare und werden ab Bash 4 unterstützt. | + | * Assoziative Arrays sind Schlüssel/Wert-Paare und werden ab Bash 4 unterstützt. |
| − | *Sie werden mit declare -A deklariert. | + | * Sie werden mit '''declare -A''' deklariert. |
| − | * | + | * Zugriff erfolgt über den Schlüssel: '''${array[key]}'''. |
| − | <syntaxhighlight lang= | + | <syntaxhighlight lang=bash> |
#!/bin/bash | #!/bin/bash | ||
declare -A fruits | declare -A fruits | ||
| Zeile 62: | Zeile 97: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
| − | = | + | = 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 = | = 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. | |
| − | + | *Erstellen Sie ein Array '''ZAHLEN''' mit mindestens fünf Elementen und geben Sie das dritte Element aus. | |
| − | * | ||
| − | * | ||
| − | |||
| − | |||
| − | * | ||
| − | * | ||
| − | |||
| − | |||
| − | |||
| − | + | *Definieren Sie ein Array '''FARBEN''' und geben Sie die Anzahl der Elemente mit '''${#FARBEN[@]}''' aus. | |
| − | *Definieren Sie | ||
| − | |||
| − | == | + | *Legen Sie ein assoziatives Array '''person''' an (z. B. '''person["name"]="Tom"''', '''person["stadt"]="Berlin"''') und geben Sie beide Werte einzeln aus, ohne Schleifen zu verwenden. |
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
Aktuelle Version vom 24. November 2025, 17:30 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“
Feldvariablen (Arrays)
- In Bash können Feldvariablen (Arrays) verwendet werden, um mehrere Werte unter einem gemeinsamen Namen zu speichern.
- Arrays werden über Indizes angesprochen und erlauben den Zugriff auf mehrere Elemente innerhalb einer Variablen.
Definition
- farbe=(blau gelb gruen rot)
Defnition einer Wertes
- farbe[4]=silber
Ausgabe einzelner Elemente
- echo ${farbe[0]} → blau
- echo ${farbe[1]} → gelb
- echo ${farbe[2]} → gruen
- echo ${farbe[3]} → rot
Assoziative Arrays
- Assoziative Arrays sind Schlüssel/Wert-Paare und werden ab Bash 4 unterstützt.
- Sie werden mit declare -A deklariert.
- Zugriff erfolgt über den Schlüssel: ${array[key]}.
#!/bin/bash
declare -A fruits
fruits["apple"]="red"
fruits["banana"]="yellow"
fruits["orange"]="orange"
echo ${fruits["apple"]}
fruits["grape"]="purple"
for key in "${!fruits[@]}"; do
echo "$key is ${fruits[$key]}"
done
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.
- Erstellen Sie ein Array ZAHLEN mit mindestens fünf Elementen und geben Sie das dritte Element aus.
- Definieren Sie ein Array FARBEN und geben Sie die Anzahl der Elemente mit ${#FARBEN[@]} aus.
- Legen Sie ein assoziatives Array person an (z. B. person["name"]="Tom", person["stadt"]="Berlin") und geben Sie beide Werte einzeln aus, ohne Schleifen zu verwenden.