Login
Newsletter
Werbung

Do, 7. Dezember 2017, 15:00

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

Pro-Linux
Traut euch!
Neue Nachrichten
Werbung