Hashes in der Bash ...
Weil ich es gerade für einen Kollegen gebraucht habe.
Ein eher selten genutztes Feature in der Bash sind assoziative Arrays (Hashes). Ab Bash Version 4 geht das ganz ohne Hilfskonstrukte.
Schlüssel und Werte dürfen "natürlich" auch Leerzeichen enthalten. Dann müssen diese allerdings - wie bekannt - in Anführungszeichen stehen.
Ergebnis des Skriptes:
Ein eher selten genutztes Feature in der Bash sind assoziative Arrays (Hashes). Ab Bash Version 4 geht das ganz ohne Hilfskonstrukte.
#!/bin/bash
declare -A dns=(
[mond]=192.168.0.1
[erde]=192.168.2.3
[saturn]=192.168.7.8
)
echo "Alle Keys: ${!dns[@]}"
echo "Alle Values: ${dns[@]}"
echo
for host in ${!dns[@]}; do
ip=${dns[${host}]}
echo "${host} hat die IP-Adresse ${ip}"
done
declare -A dns=(
[mond]=192.168.0.1
[erde]=192.168.2.3
[saturn]=192.168.7.8
)
echo "Alle Keys: ${!dns[@]}"
echo "Alle Values: ${dns[@]}"
echo
for host in ${!dns[@]}; do
ip=${dns[${host}]}
echo "${host} hat die IP-Adresse ${ip}"
done
Schlüssel und Werte dürfen "natürlich" auch Leerzeichen enthalten. Dann müssen diese allerdings - wie bekannt - in Anführungszeichen stehen.
Ergebnis des Skriptes:
Alle Keys: erde saturn mond Alle Values: 192.168.2.3 192.168.7.8 192.168.0.1 erde hat die IP-Adresse 192.168.2.3 saturn hat die IP-Adresse 192.168.7.8 mond hat die IP-Adresse 192.168.0.1
Kommentare
Ansicht der Kommentare: Linear | Verschachtelt
Jonny am :
Dirk Deimeke am :
In bash kann man der Variable leider nicht ansehen, welchen Typ sie hat, deshalb muss man es explizit deklarieren ... Das Konstrukt mit dem "@" finde ich auch nicht so wahnsinnig gut gelungen.
Philipp am :
Dirk Deimeke am :
Assoziative Arrays werden leider auch Hashes genannt, daher vermutlich die Begriffsverwirrung.
Flo am :
Dirk Deimeke am :