Verwendung von assoziativen Arrays in Bash
May 21, 2017
Assoziative Arrays sind Datenstrukturen, die Schlüssel-Wert-Paare speichern, ähnlich wie Objekte in JavaScript oder Dictionaries in Python. Sie sind ein mächtiges Werkzeug in Bash-Skripten, um strukturierte Daten zu verwalten.
Wichtiger Hinweis: Assoziative Arrays werden erst ab Bash Version 4.0 unterstützt.
1. Deklaration eines assoziativen Arrays
Ein assoziatives Array muss explizit mit declare -A deklariert werden.
# Ein leeres assoziatives Array deklarieren
declare -A user
# Mehrere Arrays deklarieren
declare -A colors sounds
# Ein Array mit initialen Werten deklarieren
declare -A colors=([red]="#ff0000" [green]="#00ff00" [blue]="#0000ff")
2. Werte hinzufügen und auslesen
Werte setzen
user[name]="John Doe"
user[email]="john.doe@example.com"
Werte auslesen
Der Zugriff auf einen Wert erfolgt über den Schlüssel. Die Variable muss in geschweiften Klammern stehen.
echo "Name: ${user[name]}"
echo "E-Mail: ${user[email]}"
3. Iteration über ein Array
Um alle Schlüssel-Wert-Paare zu durchlaufen, iteriert man über die Liste der Schlüssel.
Über Schlüssel iterieren
# Deklariere ein Beispiel-Array
declare -A services=([http]=80 [ssh]=22 [smtp]=25)
# Schleife über alle Schlüssel
for service in "${!services[@]}"; do
port=${services[$service]}
echo "Dienst: $service läuft auf Port: $port"
done
"${!services[@]}": Diese spezielle Syntax expandiert zu einer Liste aller Schlüssel des Arrays.- Die Anführungszeichen sind wichtig, um Schlüssel mit Leerzeichen korrekt zu verarbeiten.
Nur Werte auflisten
# Gibt alle Werte zurück
echo "${services[@]}"
# Ausgabe: 80 22 25
Nur Schlüssel auflisten
# Gibt alle Schlüssel zurück
echo "${!services[@]}"
# Ausgabe: http ssh smtp
4. Elemente löschen
Einzelnes Element löschen
unset 'services[smtp]'
Gesamtes Array löschen
unset services
5. Fehlerbehebung
declare: -A: invalid option
Dieser Fehler tritt auf, wenn Sie versuchen, ein assoziatives Array in einer Bash-Version vor 4.0 zu deklarieren. Dies ist häufig auf macOS der Fall, das standardmäßig eine ältere Bash-Version mitliefert.
Lösung für macOS:
- Installieren Sie eine aktuelle Bash-Version mit Homebrew:
code
brew install bash - Verwenden Sie die neue Bash-Version in Ihren Skripten:
Ändern Sie den Shebang am Anfang Ihres Skripts, um auf die von Homebrew installierte Bash-Version zu verweisen.
Stellen Sie sicher, dasscode
#!/usr/bin/env bash # oder explizit #!/usr/local/bin/bash/usr/local/binin IhremPATHvor/binsteht.
Fazit
Assoziative Arrays erweitern die Möglichkeiten von Bash-Skripten erheblich, indem sie eine einfache Verwaltung von Schlüssel-Wert-Daten ermöglichen. Voraussetzung ist die Verwendung von Bash 4.0 oder neuer.