Login
Newsletter
Werbung

Do, 7. Dezember 2017, 15:00

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[@]}")

Pro-Linux
Traut euch!
Neue Nachrichten
Werbung