Variablen-Substitutionen: Unterschied zwischen den Versionen

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen
 
(8 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
 
= Variablen-Substitution =
 
= 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
*SUX=eins  
+
* ${FARBE:-rot} – Standardwert, wenn nicht gesetzt 
*TUX=zwei 
+
* ${FARBE:=rot} – wie oben, zusätzlich wird FARBE belegt 
*SUXTUX=drei  
+
* ${FARBE:?keine farbe} – Fehlermeldung, wenn FARBE nicht definiert 
*echo $SUXTUX drei  
+
* ${FARBE:+rot} – liefert „rot“, wenn FARBE definiert ist 
*echo ${SUX}TUX einsTUX  
+
* ${FARBE:3} – Ausgabe ab Position 3 
*echo ${SUX}${TUX} → einszwei 
+
* ${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]}'''.
 +
 
 +
<syntaxhighlight lang=bash>
 +
#!/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
 +
</syntaxhighlight>
  
== Wichtige Hinweise ==
+
= Wichtige Hinweise =
 
*Zwischen Variablenname, Gleichheitszeichen und Wert dürfen keine Leerzeichen stehen.   
 
*Zwischen Variablenname, Gleichheitszeichen und Wert dürfen keine Leerzeichen stehen.   
 
*Großbuchstaben werden oft für benutzerdefinierte Variablen verwendet.   
 
*Großbuchstaben werden oft für benutzerdefinierte Variablen verwendet.   
Zeile 49: Zeile 108:
 
*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.
 +
*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.

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.