In diesem Handbuch zu Bash-Arrays erfahren Sie, wie Sie indizierte und assoziative Arrays in Bash deklarieren und damit arbeiten.
In Bash können Sie Arrays erstellen, um eine Sammlung von Elementen zu speichern. Bash-Arrays sind eindimensional Sammlungen. In Programmiersprachen wie C und C++ sind Arrays Sammlungen von Elementen desselben Datentyps. In Bash können Sie jedoch je nach Anwendungsfall Integer und Strings im selben Array speichern.
In diesem Tutorial erfahren Sie, wie Sie ein Bash-Array deklarieren und auf seine Elemente zugreifen. Anschließend lernen Sie, wie Sie die Elemente eines Arrays durchlaufen und Elemente an ein Array anhängen. Schließlich lernen Sie assoziative Arrays in Bash kennen.
Lassen Sie uns beginnen!
⚙ Interessiert am Mitcodieren? Hier sind die Voraussetzungen:
- Wenn Sie sich auf einem Mac oder einem Linux-Computer befinden, können Sie Ihr Terminal öffnen und mitcoden.
- Wenn Sie sich auf einem Windows-Rechner befinden, installieren Sie bitte Git-Bash oder im Windows-Subsystem für Linux (WSL2).
How to Declare a Bash Array
In diesem Abschnitt lernen Sie die Syntax zum Deklarieren eines Bash-Arrays und Codebeispiele kennen.
Syntax der Bash-Array-Deklaration
Sie können ein Array in Bash mit der folgenden Syntax deklarieren:
$ arrayName=(elt1 elt2 ... eltN)
# arrayName is the name of the array
# elt1 through eltN are the N elements in the array
In der obigen Syntax arrayName
bezeichnet den Namen des Arrays, das enthält N
Elemente elt1...eltN
.
Die Elemente eines Arrays sind zwischen öffnenden und schließenden Klammern eingeschlossen ()
. Beachten Sie auch, dass die Elemente des Arrays durch a getrennt sind Leerzeichen. Wie bei jeder Bash-Variable sollte es eine geben nicht Leerzeichen vor oder nach dem Zuweisungsoperator =
.
📑 In den meisten anderen Programmiersprachen trennen Sie die Elemente eines Arrays oder ähnlicher Sammlungen durch Kommas. Aber in Bash ist Whitespace das Trennzeichen.
In Bash werden solche Arrays, in denen die Elemente durch ihren Index identifiziert werden, als bezeichnet indiziertes Array.
Deklarieren von indizierten Arrays in Bash
Lassen Sie uns erstellen prices
, ein Array von Zahlen.
$ prices=(24 27 18 30 15)
Wie in der Syntax erwähnt, sind die Zahlen in der
prices
Array werden durch ein in Klammern eingeschlossenes Leerzeichen getrennt, ohne Leerzeichen vor und nach dem Zuweisungsoperator =.
In Bash können Sie die verwenden echo
Befehl zum Ausdrucken des Werts einer Variablen. Verwenden $variableName
gibt den Wert von aus variableName
. Sie können jedoch sehen, dass die Verwendung des Namens des Arrays nur das erste Element ausgibt.
$ echo $prices
24
Bash-Arrays folgen der Nullindizierung. Das erste Element hat also den Index 0, das zweite Element den Index 1 und so weiter. Sie können auch eine negative Indizierung verwenden; der Index des letzten Array-Elements ist -1.
Was passiert, wenn Sie versuchen, auf das Element an einem bestimmten Index zuzugreifen und es auszudrucken? Lassen Sie uns versuchen, das Element bei Index 1 auszudrucken.
$ echo $prices[1]
24[1]
Warum ist die Ausgabe 24[1]? 🤔 Das liegt daran, dass Bash ersetzt $prices
mit 24 wird das erste Element im Array und [1] als solches ausgegeben.
Um das Element an einem bestimmten Index auszudrucken, können Sie die Parametererweiterung des Formulars verwenden ${prices[index]}
.
$ echo ${prices[1]}
# 27
$ echo ${prices[2]}
# 18
Um alle Elemente im Array auszudrucken, können Sie angeben @
anstelle eines bestimmten Index.
$ echo ${prices[@]}
24 27 18 30 15
Als Nächstes erstellen wir ein Array von Zeichenfolgen. Durch Ausführen des folgenden Befehls wird ein indiziertes Array erstellt:
$ declare -a fruits
Die Option -a
erstellt ein indiziertes Array. Sie können das Array nun Element für Element füllen, indem Sie das Element an einem bestimmten Index deklarieren, wie unten gezeigt:
$ fruits[0]="cherry"
$ fruits[1]="berry"
$ fruits[2]="apple"
$ fruits[3]="pear"
$ fruits[4]="melon"
$ fruits[5]="orange"
Um nun alle Elemente des Arrays auszudrucken, können Sie verwenden ${fruits[@]}
.
$ echo ${fruits[@]}
cherry berry apple pear melon orange
Access the Elements of a Bash Array

Auf die Elemente des Arrays können Sie auf folgende Weise zugreifen:
- Durchlaufen Sie das Array und greifen Sie direkt auf das Element zu
- Durchlaufen Sie den Satz von Indizes und greifen Sie auf Elemente an einem bestimmten Index zu
Durchlaufen Sie das Array und greifen Sie auf Elemente zu
Wenn Sie in Python codiert haben, haben Sie die verwendet for-Schleife unter Verwendung der folgenden Syntax:
for elt in some_list:
print(elt)
Lassen Sie uns nun das Bash-Äquivalent der obigen for-Schleife schreiben.
Wir wissen, dass {prices[@]}
erweitert sich auf alle Elemente in der prices
Reihe. Und ${prices[@]}
gibt uns die Werte aller Elemente.
Die for-Schleife von Bash ähnelt der for-Schleifen-Syntax von Python, aber die Anweisungen im Schleifenkörper sollten darin eingeschlossen sein do
und done
, wie gezeigt:
$ for price in ${prices[@]}
> do
> echo $price
> done
Weil wir den echo-Befehl verwenden und den Wert der Variablen ausgeben price
, erhalten wir folgende Ausgabe:
# output
24
27
18
30
15
Greifen Sie über den Array-Index auf die Elemente zu
Eine andere Möglichkeit, Arrays zu durchlaufen, besteht darin, den Index der Elemente zu verwenden. Dies ähnelt dem for-Schleifenkonstrukt in Python, das die verwendet range()
Funktion:
for i in range(len(some_list)):
print(i)
Um eine Liste der zu durchlaufenden Indizes zu erhalten, können Sie ein Ausrufezeichen (!
) vor dem Arraynamen in der Parametererweiterung. Dadurch erhalten Sie die Liste der Alle gültige Indizes für das Array, wie gezeigt:
$ echo ${!prices[@]}
0 1 2 3 4
Dieses prices
Array enthält 5 Elemente, also beginnt der Index bei 0 und geht bis 4.
Als nächstes können wir die Liste der Indizes durchlaufen und auf das Element an jedem Index zugreifen. Zum Index i
, ${prices[i]}
ist das Element am Index i
.
$ for i in ${!prices[@]}
> do
> echo ${prices[i]}
> done
Die obige Schleife gibt alle Elemente im Array aus.
# output
24
27
18
30
15
💬 Hier führen wir nach dem Zugriff auf jedes Element eine einfache Operation durch, um seinen Wert auszudrucken. Im Allgemeinen können wir jede gültige Verarbeitung der Elemente haben.
Append Elements to a Bash Array

In den prices
array haben wir fünf Elemente (bei den Indizes 0,1,2,3 und 4). Wenn Sie am Ende des Arrays bei Index 5 ein Element hinzufügen möchten, können Sie dies wie folgt tun:
$ prices[5]=21
Wir sehen, dass 21 an das Ende des Preis-Arrays angehängt wurde.
$ echo ${prices[@]}
24 27 18 30 15 21
Es ist jedoch bequemer, an das Ende des Arrays anzuhängen – ohne sich daran zu erinnern – den Index des zuletzt hinzugefügten Elements oder die Anzahl der Elemente, die sich derzeit im Array befinden.
Sie können verwenden arrayName+=(elements(s))
it, um ein oder mehrere Elemente an ein Array anzuhängen, wie gezeigt:
$ prices+=(10)
Wenn wir nun die ausdrucken prices
array, sehen wir, dass 10 an das Ende des Arrays angehängt wurde.
$ echo ${prices[@]}
24 27 18 30 15 21 10
Als Nächstes lernen wir, wie man assoziative Arrays in Bash deklariert.
Associative Arrays in Bash
Wenn Sie eine Beziehung in Form von Schlüssel-Wert-Paaren definieren möchten, können Sie eine verwenden assoziatives Array. Sie können ein assoziatives Array mit der folgenden allgemeinen Syntax deklarieren. Beachten Sie, dass wir die verwenden -A
Option statt -a
.
$ declare -A fruits_prices
Sie können dem assoziativen Array Elemente hinzufügen, indem Sie den Schlüssel und den entsprechenden Wert angeben. Hier haben wir die Namen der Früchte als Schlüssel und die Zahlen aus dem Preisfeld als Werte hinzugefügt.
$ fruits_prices[cherry]=24
$ fruits_prices[berry]=27
$ fruits_prices[apple]=18
$ fruits_prices[pear]=30
$ fruits_prices[melon]=15
$ fruits_prices[orange]=21
Wie greifen wir also auf die Elemente in einem assoziativen Array zu?
So wie Sie den Wert mit dem entsprechenden Schlüssel in einem Python-Wörterbuch nachschlagen würden, können Sie mit den Schlüsseln auf die Werte in einem assoziativen Array zugreifen.
$ echo ${fruits_prices[berry]}
# 27
Wir sehen das ${fruits_prices[@]}
erweitert sich zu den Werten und ${!fruits_prices[@]}
erweitert sich auf die Tasten.
$ echo ${fruits_prices[@]}
# Output: 18 27 21 24 30 15
$ echo ${!fruits_prices[@]}
# Output: apple berry orange cherry pear melon
Hinweis: Die Reihenfolge der Elemente stimmt nicht mit der Reihenfolge überein, in der wir sie hinzugefügt haben. Dies liegt daran, dass assoziative Arrays im Gegensatz zu indizierten Arrays keine geordneten Sammlungen sind. Vielmehr arbeiten sie an der Zuordnung zwischen den Schlüsseln und den Werten. Daher sind Schlüssel für assoziative Arrays das, was Indizes für indizierte Arrays sind.
Sie können auch das assoziative Array durchlaufen und wie gezeigt auf die Schlüssel zugreifen:
$ for key in ${!fruits_prices[@]}
> do
> echo $key
> done
# Output
apple
berry
orange
cherry
pear
melon
Die folgende Schleife zeigt, wie Sie auf die Werte zugreifen können.
$ for value in ${fruits_prices[@]}
> do
> echo $value
> done
# Output
18
27
21
24
30
15
Obwohl die Verwendung empfohlen wird arrayName[key]=value
, Sie können es auch als Sequenz wie folgt deklarieren:
declare -A arrayName
arrayName=(key1 value1 key2 value2 ... keyN valueN)
Auf diese Weise leitet Bash das erste Element als ersten Schlüssel ab, das zweite Element als ersten Wert und so weiter.
Summieren
Ich hoffe, Sie verstehen jetzt, wie Sie Bash-Arrays erstellen und damit arbeiten. Hier ist eine kurze Zusammenfassung dessen, was Sie gelernt haben.
- Sie können ein indiziertes Array in Bash mit der Syntax deklarieren
arrayName=(elt1 elt2 elt3 ... eltN)
oder laufedeclare -a arrayName
und füge dem Array Elemente hinzu. - Um auf die Elemente zuzugreifen, können Sie mit durchlaufen
${arrayName[@]}
. Alternativ erhalten Sie die Liste aller gültigen Indizes über die Parametererweiterung${!arrayName[@]}
. - Schließlich haben Sie auch gelernt, wie man ein assoziatives Array deklariert, um Schlüssel-Wert-Paare in Bash zu speichern.
Als nächstes sehen Sie sich das Tutorial an für Schleifen in Bash.