Shellskripte mit Aha-Effekt: Bash-Arrays
Ist dagegen der Index im Array nicht enthalten, liefert ${namen[$Key]}
einen leeren String. Um die Existenz eines Eintrags zu testen, können Sie folgendermaßen vorgehen:
01: if [ ${namen[$Key]+_} ]; then 02: echo "$Key gefunden" 03: else 04: echo "$Key nicht gefunden" 05: fi
In Zeile 1 wird die Parametersubstitution der Bash verwendet. Wenn das Hash-Element existiert, wertet die Bash den Ausdruck als »_« aus, andernfalls als Nullzeichenfolge. Wer will, kann auch »jawoll« oder irgend etwas anderes anstatt des Unterstrichs innerhalb der eckigen Klammern verwenden. Es gibt noch weitere Möglichkeiten in der Bash, auf Existenz oder Fehlen von Hashes zu testen, wobei sich alle auf die Parametersubstitution stützen. Das folgende Protokoll zeigt zwei weitere Alternativen zu der oben angegebenen:
$ ax[foo]="bar" $ echo ${ax[foo]:-FEHLT} "bar" $ echo ${ax[nix]:-FEHLT} FEHLT $ echo ${ax[foo]:+EXISTIERT} EXISTIERT
Alle Indexschlüssel (Keys) erhält man mittels ${!namen[@]}
und auf die Werte
kann mit ${namen[@]}
zugegriffen werden. Der Befehl echo ${!namen[@]}
ergibt dann für das obige Beispiel:
Daniel Gustav Donald
Die Werte dazu liefert der Befehl ${namen[@]}
. Man erhält die Ausgabe:
Düsentrieb Gans Duck
Die Länge eines assoziativen Arrays (im Prinzip ist dies die Anzahl der Schlüssel) erhält man mittels ${#MYMAP[@]}
. Im Beispiel von oben erhält man also den Wert 3.
Am häufigsten wird man aber Schleifenkonstruktionen antreffen, die über Keys oder Werte iterieren. Die folgende for-Schleife läuft über die Keys:
01: for i in "${!namen[@]}" 02: do 03: echo $i 04: done
Ohne das Ausrufezeichen vor dem Arraynamen wird über die Werte iteriert:
01: for w in "${namen[@]}" 02: do 03: echo $w 04: done
Mit der folgenden Schleife werden schließlich alle Key-Werte-Paare ausgegeben:
01: for i in "${!namen[@]}" 02: do 03: echo "$i --> ${namen[$i]}" 04: done
Startet man das Skript, erhält man:
Daniel --> Düsentrieb Gustav --> Gans Donald --> Duck
Die Reihenfolge entspricht nicht der Reihenfolge der Eintragung. Das kann auch mit einem weiteren Versuch demonstriert werden. Fügt man nun noch den Onkel Dagobert hinzu, liefert das Programm:
Onkel Dagobert --> Duck Daniel --> Düsentrieb Gustav --> Gans Donald --> Duck