Login
Newsletter
Werbung

Do, 7. Dezember 2017, 15:00

Shellskripte mit Aha-Effekt: Bash-Arrays

Bei der Zuweisung beginnt der Feldindex automatisch bei 0, also enthält array[0] den Wert »Merkur«. Aber ist es auch möglich, eine Zuweisungsliste an einer anderen Position zu beginnen, indem der Startindex angegeben wird:

array=([2]=Pluto Eris ...)

Diese Methode ist jedoch nicht geeignet, an ein Array neue Elemente anzuhängen. Ein existierendes Array wird immer komplett überschrieben. Die Anzahl der Elemente, die Sie einem Array übergeben können, ist bei der Bash beliebig. Als Trennzeichen zwischen den einzelnen Elementen dient das Leerzeichen.

Auch aus einer Datei lässt sich ein Array erzeugen. Es wird der Dateiinhalt per cat-Kommando und $(...) auf die Kommandozeile gehoben und er landet damit in der Initialisierungsliste:

array=($(cat "datendatei"))

Der Zugriff auf die einzelnen Komponenten eines Arrays erinnert an C oder andere Sprachen. Er erfolgt mittels

${array[index]}

Einziger Unterschied zu anderen Sprachen: Für die Referenz auf den Arrayinhalt müssen geschweifte Klammern verwendet werden, da die eckigen Klammern ja schon Metazeichen der Bash sind (Bedingung analog dem test-Kommando) und sonst eine Expansion auf Shell-Ebene versucht würde.

Alle Elemente eines Arrays können Sie, ähnlich wie bei den Kommandozeilenparametern, folgendermaßen ausgeben lassen:

echo ${array[*]}
echo ${array[@]}

Der Unterschied ist der gleiche wie bei den Kommandozeilenparametern ($* und "$"). Ohne Anführungszeichen expandieren beide Ausdrücke gleich, mit Anführungszeichen expandiert ${array[*]} zu allen Elementen in einem, während ${array[]} zu den einzelnen Elementen in Anführungszeichen expandiert. Das ist insbesondere bei for-Schleifen wichtig, die über die einzelnen Elemente iterieren.

Mit ${!array[*]} lassen sich alle Indizes des Arrays auflisten. Dieses Feature ist erst später hinzugekommen. Diese Liste ist interessant, wenn das Array Lücken bei den Indizes aufweist. Im folgenden Beispiel werden Index und Inhalt aufgelistet:

01: for IND in ${!array[@]}
02: do
03:   echo "$IND ${array[$IND]}"
04: done

Die Anzahl der belegten Elemente im Array erhalten Sie mit (auch diese Syntax ähnelt der Kommandozeile bzw. der Shell-Variablen $#):

echo ${#array[*]}

Wollen Sie feststellen, wie lang eine Array-Komponente ist, so gehen Sie genauso vor wie beim Ermitteln der Anzahl belegter Elemente im Array, nur dass Sie anstelle des Sternchens den entsprechenden Feldindex verwenden:

echo ${#array[1]}

Pro-Linux
Traut euch!
Neue Nachrichten
Werbung