Shellskripte mit Aha-Effekt: Bash-Arrays
Löschen, Kopieren und Konkatenieren
Zum Löschen eines Arrays oder einer Komponente wird wie bei den Shell-Variablen vorgegangen. Das komplette Array löschen Sie mit unset array
. Einzelne Elemente können Sie durch Angabe des Index löschen: unset array[index]
. Das funktioniert aber nicht immer, zum Beispiel:
array=(Merkur Venus Erde Mars Jupiter Saturn Uranus Neptun) INDEX=4 echo {#array[@]} 8 echo ${array[$INDEX]} Jupiter unset ${array[$INDEX]} echo ${#array[@]} 8 # Oha! Das sollte aber nun 7 sein, weil Jupiter ja geloescht wurde. Mal sehen: echo ${array[$INDEX]} Jupiter # Ooops! Den gibt es ja immer noch!
Der Fehler liegt darin, dass in der Bash ein Array als sogenannter Hash gespeichert wird (»sparse«). Sie sollten sich also nicht darauf verlassen, dass eine Komponente nach dem unset
tatsächlich weg ist.
Zum Kopieren eines kompletten Arrays können Sie entweder eine Schleife programmieren, in der jede einzelne Komponente des einen Arrays dem anderen Array zugewiesen wird. Es geht aber auch mit weniger Aufwand. Sie kombinieren das Auflisten aller Elemente des einen Arrays mit dem Zuweisen einer Liste mit Werten an ein zweites Array:
array_neu=( ${array[@]} )
Auch hierzu ein Beispiel:
array=(Merkur Venus Erde Mars Jupiter Saturn) # Kontrollausgabe echo ${array[@]} Merkur Venus Erde Mars Jupiter Saturn # array auf yarra kopieren yarra=( ${array[@]} ) # Kontrollausgabe echo ${yarra[@]} Merkur Venus Erde Mars Jupiter Saturn
Das Aneinanderhängen zweier Arrays geht genauso wie das Konkatenieren von Strings. Es wird einfach eine Initialisierungsliste aus beiden Arrays gebildet, die dann einem neuen Array zugewiesen wird:
Gesamt=("${Array1[@]}" "${Array2[@]}")