11.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 Zusammenfassung von mehreren Variablen zu einer einzigen. Dabei wird auch in der Shell auf die Werte elementweise zugegriffen.
Werte zuweisen
Um einem Array Werte zuzuweisen, benutzt man im einfachsten Fall folgende Schreibweise:
Listing 11.13 Zuweisen von Elementen
NamensArray=(Alfredo Berta Carsten Diana ...)
Es ist jedoch auch möglich, gezielt Array-Elemente mit neuen Werten zu belegen. Dafür verwendet man eckige Klammern wie in awk:
Listing 11.14 Einen Wert an Element 2 zuweisen
name[2]="Max Musterman"
Auf Werte zugreifen
Um nun auf die gesetzten Werte zuzugreifen, wird die Schreibweise
Listing 11.15 Auf Array-Elementwerte zugreifen
${name[2]}
genutzt. Es ist jedoch auch möglich, alle Array-Elemente auf einmal ausgeben zu lassen. Dazu verwendet man das Stern-Zeichen (*).
Listing 11.16 Alle Array-Elemente ausgeben
$ 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
...
...
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, so zeigt uns die Ausgabe, dass sich unter OpenBSD-3.6 ganze 387 Dateien im Verzeichnis /usr/bin befinden.
Listing 11.17 Elementanzahl
$ echo ${#usrbinprogs[*]}
387
Länge eines Elements
Um die Zeichenlänge eines Elements herauszubekommen, so verwendet man anstelle des Sterns bei der Abfrage der Elementanzahl einfach die Nummer des Elements: ${#usrbinprogs[2]}
Elemente löschen
Möchte man einzelne Elemente oder ein komplettes Array löschen, verwendet man unset für diese Aufgabe:
Listing 11.18 unset versteht keinen Spaß.
$ unset usrbinprogs[2]
$ echo ${#usrbinprogs[*]}
386
$ unset usrbinprogs
$ echo ${#usrbinprogs[*]}
0
Ihr Kommentar
Wie hat Ihnen das <openbook> gefallen? Wir freuen uns immer über Ihre freundlichen und kritischen Rückmeldungen.