Hosten Sie Ihren eigenen KI-Agenten mit OpenClaw - kostenlose 1-Klick-Installation!

Bash Array: Schleifen, indizierte und assoziative Arrays einfach erklärt

Bash Array: Schleifen, indizierte und assoziative Arrays einfach erklärt (Titelbild)

Bash-Arrays gehören zu den Features, die einschüchternd wirken, bis du sie einmal benutzt hast. Danach wirst du ständig darauf zurückgreifen, wenn du Skripte schreibst, die Listen von Werten verarbeiten.

Was ist ein Bash-Array?

Ein Bash-Array ist eine Variable, die mehrere Werte speichert. Statt für jeden Eintrag in einer Liste eine eigene Variable zu deklarieren, packst du sie in ein Array und referenzierst sie über Index oder Key. Bash ist es egal, ob die Elemente Strings oder Zahlen sind, und es erzwingt keine einheitlichen Typen.

Indexierte vs. assoziative Arrays

Indexierte Arrays verwenden Integer als Keys, beginnend bei 0. Sie sind der Standard und verhalten sich wie Arrays in den meisten anderen Sprachen. Assoziative Arrays verwenden Strings als Keys und bieten dir Key-Value-Paar-Funktionalität, ähnlich wie Hash Maps oder Dictionaries. Assoziative Arrays erfordern eine explizite Deklaration mit ‚declare -A‘.

Wann du Arrays in Bash-Skripten verwenden solltest

Verwende Arrays, wenn du über eine Liste von Servern, Dateien, Benutzernamen oder einer beliebigen Sammlung von Elementen iterierst. Ohne Arrays landest du bei mehreren Variablen (server1, server2, server3) und Bedingungslogik, die Code dupliziert. Mit einem Array erledigt eine einzige Schleife die gesamte Liste.

Ein Bash-Array deklarieren

Ein indexiertes Array deklarieren

Drei Wege, ein indexiertes Array zu deklarieren:

Alles auf einmal:

fruits=("apple" "banana" "cherry")

Einzeln:

fruits[0]="apple" fruits[1]="banana" fruits[2]="cherry"

Mit ‚declare‘:

declare -a fruits=("apple" "banana" "cherry")

Ein assoziatives Array deklarieren

Assoziative Arrays erfordern die Direktive ‚declare -A‘:

declare -A servers servers[web]="192.168.1.10" servers[db]="192.168.1.20" servers[cache]="192.168.1.30"

Oder inline:

declare -A servers=([web]="192.168.1.10" [db]="192.168.1.20")

Variablen zu einem Bash-Array hinzufügen

Bei indexierten Arrays fügst du mit dem Operator ‚+=‘ an:

fruits+=("date" "elderberry")

Einem bestimmten Index zuweisen:

fruits[5]="fig"

Hinweis: Bash-Arrays sind sparse (lückenhaft). Wenn du Index 5 zuweist, obwohl du nur 3 Elemente hast, bleiben die Indizes 3 und 4 ungesetzt, nicht leer.

Array-Elemente referenzieren und ausgeben

Auf ein einzelnes Element zugreifen

Verwende die geschweifte-Klammern-Syntax mit dem Index:

echo ${fruits[0]}

Für assoziative Arrays:

echo ${servers[web]}

Das gesamte Array ausgeben

Das ‚@‘-Symbol expandiert alle Elemente:

echo ${fruits[@]}

Alle Keys anzeigen:

echo ${!fruits[@]}

Die Länge des Arrays ermitteln

Stelle ‚#‘ voran, um die Bash-Array-Länge zu erhalten:

echo ${#fruits[@]}

Für die String-Länge eines bestimmten Elements:

echo ${#fruits[0]}

Bash-Array-Elemente entfernen

Verwende ‚unset‘, um ein bestimmtes Element zu entfernen:

unset fruits[1]

Das entfernt das Element, hinterlässt aber die Indexlücke. Die Array-Länge verringert sich um eins. Das gesamte Array entfernen:

unset fruits

Durch ein Bash-Array iterieren

Schleife mit For-In

Der Standardweg, um über Array-Werte zu iterieren:

for fruit in "${fruits[@]}"; do     echo "$fruit" done

Die Anführungszeichen um ‚${fruits[@]}‘ sorgen dafür, dass Elemente mit Leerzeichen korrekt behandelt werden. Ohne sie wird ein Element wie ‚passion fruit‘ in zwei Teile aufgesplittet.

Schleife mit Index

Wenn du neben dem Wert auch den Index brauchst:

for i in "${!fruits[@]}"; do     echo "Index $i: ${fruits[$i]}" done

Das ‚!‘-Präfix expandiert die Indizes des Arrays statt seiner Werte.

Ein Bash-Array an eine Funktion übergeben

Bash übergibt Arrays nicht nativ an Funktionen. Der Workaround: Übergib den Array-Namen und nutze indirekte Expansion innerhalb der Funktion:

function process_array {     local -n arr=$1     for item in "${arr[@]}"; do         echo "Processing: $item"     done }  my_list=("file1" "file2" "file3") process_array my_list

Das ‚-n‘-Flag bei ‚local‘ erstellt eine Namensreferenz. Die Funktion arbeitet mit dem Original-Array, ohne es zu kopieren.

FAQ: Bash-Array

Wie deklariere ich ein Array in Bash?

Für ein indexiertes Array: fruits=(„apple“ „banana“ „cherry“) Für ein assoziatives Array: declare -A servers=([web]=“192.168.1.10″ [db]=“192.168.1.20″)

Wie durchlaufe ich ein Bash-Array?

Verwende for-in: for item in „${array[@]}“; do echo „$item“; done. Setze „${array[@]}“ immer in Anführungszeichen, um Elemente mit Leerzeichen korrekt zu behandeln.

Wie ermittle ich die Länge eines Bash-Arrays?

Verwende ‚${#array[@]}‘. Beispiel: ‚count=${#fruits[@]}‘. Das liefert die Anzahl der Elemente im Array.

Was ist ein assoziatives Bash-Array?

Ein assoziatives Array verwendet String-Keys statt Integer-Indizes. Deklariere es mit ‚declare -A‘: declare -A config=([host]=“localhost“ [port]=“3306″). Greife auf Werte mit ‚${config[host]}‘ zu.

Nach oben scrollen