7.4 Arrays
Mit Arrays haben wir uns bereits im Zusammenhang mit der Skriptsprache awk auseinandergesetzt. Nun werden wir auf Arrays in der Shell eingehen.
Ein Array ist auch hier eine »Ansammlung« von mehreren Variablen in einer einzigen. Dabei wird auch in der Shell auf die einzelnen Variablen elementweise zugegriffen.
Werte zuweisen
Um einem Array Werte zuzuweisen, benutzt man im einfachsten Fall folgende Schreibweise:
NamensArray=(Alfredo Berta Carsten Diana ...)
Listing 7.13 Zuweisen von Elementen
Es ist jedoch auch möglich, gezielt Array-Elemente mit neuen Werten zu belegen. Dafür verwendet man eckige Klammern wie in awk:
name[2]="Max Musterman"
Listing 7.14 Einen Wert an Element 2 zuweisen
Auf Werte zugreifen
Um nun auf die gesetzten Werte zuzugreifen, wird die Schreibweise
${name[2]}
Listing 7.15 Auf Array-Elementwerte zugreifen
genutzt. Es ist jedoch auch möglich, alle Array-Elemente auf einmal ausgeben zu lassen. Dazu verwendet man für die Elementangabe das Stern-Zeichen (*).
$ usrbinprogs=(`/bin/ls /usr/bin`) $ echo ${usrbinprogs[*]} Mail a2p addftinfo addr2line afmtodit afslog apply apropos ar arch as asa asn1_compile at atq atrm aucat audioctl awk b64decode b64encode banner basename batch bc bdesbiff c++ c++filt c2ph cal calendar cap_mkdb captoinfo cc cdio checknr chflags chfn chpass chsh ci clear cmp co col colcrt colrm column comm compile_et compress cpan cpp crontab ctags cu cut cvs cvsbug dbmmanage dc deroff diff diff3 dirname dprofpp du egrep elf2olf enc2xs encrypt env eqn ex ... ...
Listing 7.16 Alle Array-Elemente ausgeben
Anzahl der Elemente
Die Anzahl der Elemente eines Arrays kann abgefragt werden, indem man in der »Gib alle Elemente aus«-Schreibweise noch eine Raute einfügt. Verwenden wir nun das Array aus dem letzten Listing für diese Abfrage, zeigt uns die Ausgabe, dass sich unter OpenBSD-3.6 ganze 387 Dateien im Verzeichnis /usr/bin befinden.
$ echo ${#usrbinprogs[*]}
387
Listing 7.17 Elementanzahl
Länge eines Elements
Um die Zeichenlänge eines Elements herauszubekommen, verwendet man anstelle des Sterns bei der Abfrage der Elementanzahl einfach die Nummer des Elements: ${#usrbinprogs[2]}
Elemente löschen
Möchte man nun einzelne Elemente oder ein komplettes Array löschen, verwendet man einfach unset für diese Aufgabe:
$ unset usrbinprogs[2] $ echo ${#usrbinprogs[*]} 386 $ unset usrbinprogs $ echo ${#usrbinprogs[*]} 0
Listing 7.18 unset versteht keinen Spaß