Login
Newsletter
Werbung

Do, 7. Dezember 2017, 15:00

Shellskripte mit Aha-Effekt: Bash-Arrays

Auch an denjenigen, die schon über 20 Jahre mit der Bash arbeiten, sind Bash-Arrays bisher vielleicht vorbeigegangen. Dieser Artikel zeigt, wie man Arrays auch in der Bash verwenden kann, so wie von Perl und anderen Sprachen bekannt.

Arrays ermöglichen es, eine geordnete Folge von Werten eines bestimmten Typs zu speichern und zu bearbeiten. Allerdings erlaubt die Bash nur eindimensionale Arrays. Dabei werden zwei grundlegende Typen von Arrays unterschieden.

Indizierte Arrays verwenden positive Integer-Zahlen als Index. Sie sind meist sparse, die Indizes sind nicht unbedingt zusammenhängend. Wie in C und vielen anderen Sprachen beginnen die ganzzahligen Array-Indizes bei 0. Indizierte Arrays wurden zuerst bei der Bourne-ähnlichen Shell, der ksh eingeführt. Indizierte Arrays tragen immer das Attribut -a.

Assoziative Arrays (manchmal als Hash bezeichnet) verwenden beliebige nichtleere Zeichenketten als Index. Assoziative Arrays sind immer ungeordnet, sie assoziieren nur Index-Wert-Paare. Wenn Sie mehrere Werte aus dem Array abrufen, können Sie sich nicht darauf verlassen, dass diese in derselben Reihenfolge wiedergegeben werden, in der sie eingefügt wurden. Assoziative Arrays tragen immer das Attribut -A. Im Gegensatz zu indizierten Arrays müssen sie immer ausdrücklich deklariert werden.

Indizierte Arrays

Ein indiziertes Array (Feld, Vektor, Reihung) ermöglicht die Verarbeitung mehrerer gleichartiger Elemente, wobei auf jedes Element über seinen Index eindeutig zugegriffen werden kann. Oft werden Arrays in Schleifen verwendet, so dass man nicht auf eine Reihe von einzelnen Variablen zurückgreifen muss.

Die folgenden Möglichkeiten versehen eine Variable mit Array-Attribut, wobei beim indizierten Array keine Deklaration notwendig ist. Diese erfolgt meist implizit durch die Wertzuweisung:

  • ARRAY = () deklariert ein indiziertes Array namens »ARRAY« und initialisiert es als leer. Dies kann auch zum Leeren eines bestehenden Arrays verwendet werden.
  • ARRAY[0] = xxx besetzt das erste Element eines indizierten Arrays (Wertzuweisung). Wenn noch kein Array namens »ARRAY« existiert, wird es erzeugt.
  • declare -a ARRAY deklariert ein indiziertes Array namens »ARRAY«. Ein bereits vorhandenes Array wird dadurch nicht initialisiert.

Wenn Sie einer Array-Komponenten einen Wert zuweisen wollen, erfolgt dies genauso wie bei den normalen Shell-Variablen. Sie geben lediglich noch den Feldindex eingeschlossen in eckige Klammern an. Insofern unterscheidet sich die Bash nicht von C, Perl, Python oder anderen Programmiersprachen. Sie müssen lediglich daran denken, dass rechts und links vom Gleichheitszeichen kein Leerzeichen stehen darf. Im folgenden Beispiel erfolgt das Belegen der dritten(!) Arraykomponente mit dem String »zwo«:

array[2]=zwo

Was geschieht in diesem Fall mit den Komponenten array[0] und array[1]? Bei der Bash-Programmierung dürfen Arrays Lücken enthalten (wie z.B. auch in Perl oder anderen Interpretersprachen). Im Unterschied zu anderen Programmiersprachen müssen Sie in der Bash das Array auch nicht vor der Verwendung deklarieren. Sie sollten es jedoch trotzdem zu tun, denn einerseits kann man damit angeben, dass die Werte innerhalb eines Arrays z. B. als Integer gültig sein sollen (typeset -i array) und andererseits können Sie ein Array mit Schreibschutz versehen (typeset -r array).

Häufig will man beim Anlegen eines Arrays dieses mit Werten initialisieren. In der Bash erfolgt dies durch Klammern der Werte:

array=(Merkur Venus Erde Mars Jupiter Saturn ...)

Pro-Linux
Traut euch!
Neue Nachrichten
Werbung