Ein Leitfaden für Bash-Arrays
Veröffentlicht: 2022-12-30In 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 eindimensionale 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.
Lass uns anfangen!
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 einen Windows-Computer verwenden, installieren Sie bitte Git Bash oder das Windows-Subsystem für Linux (WSL2).
So deklarieren Sie ein 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 bezeichnet arrayName
den Namen des Arrays, das N
Elemente elt1...eltN
enthält.
Die Elemente eines Arrays werden zwischen öffnenden und schließenden Klammern ()
eingeschlossen. Beachten Sie auch, dass die Elemente des Arrays durch ein Leerzeichen getrennt sind. Wie bei jeder Bash-Variablen darf vor oder nach dem Zuweisungsoperator =
kein Leerzeichen stehen.
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 indiziertes Array bezeichnet.
Deklarieren von indizierten Arrays in Bash
Lassen Sie uns prices
erstellen, eine Reihe von Zahlen.
$ prices=(24 27 18 30 15)
Wie in der Syntax erwähnt, werden die Zahlen im
prices
-Array durch ein Leerzeichen getrennt, in Klammern eingeschlossen, ohne Leerzeichen vor und nach dem Zuweisungsoperator =.
In Bash können Sie den echo
-Befehl verwenden, um den Wert einer Variablen auszudrucken. Die Verwendung $variableName
gibt den Wert von variableName
aus. 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]? Dies liegt daran, dass Bash $prices
durch 24, das erste Element im Array, ersetzt und [1] als solches ausgegeben wird.
Um das Element an einem bestimmten Index auszudrucken, können Sie die Parametererweiterung der Form ${prices[index]}
verwenden.
$ echo ${prices[1]} # 27 $ echo ${prices[2]} # 18
Um alle Elemente im Array auszugeben, können Sie @
anstelle eines bestimmten Indexes angeben.
$ 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 ${fruits[@]}
verwenden.
$ echo ${fruits[@]} cherry berry apple pear melon orange
Greifen Sie auf die Elemente eines Bash-Arrays zu
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 for-Schleife mit der folgenden Syntax verwendet:
for elt in some_list: print(elt)
Lassen Sie uns nun das Bash-Äquivalent der obigen for-Schleife schreiben.
Wir wissen, dass {prices[@]}
prices
auf alle Elemente im Preis-Array ausdehnt. 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 wie gezeigt in do
und done
eingeschlossen werden:
$ for price in ${prices[@]} > do > echo $price > done
Da wir den Befehl echo verwenden und den Wert der Variable price
ausgeben, erhalten wir die 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 Funktion range()
verwendet:
for i in range(len(some_list)): print(i)
Um eine Liste der zu durchlaufenden Indizes zu erhalten, können Sie in der Parametererweiterung ein Ausrufezeichen ( !
) vor den Arraynamen setzen. Dadurch erhalten Sie die Liste aller gültigen Indizes für das Array, wie gezeigt:
$ echo ${!prices[@]} 0 1 2 3 4
Das 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. Für Index i
ist ${prices[i]}
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.
Elemente an ein Bash-Array anhängen
Im 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 arrayName+=(elements(s))
it verwenden, um ein oder mehrere Elemente an ein Array anzuhängen, wie gezeigt:
$ prices+=(10)
Wenn wir nun das prices
-Array ausdrucken, 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.
Assoziative Arrays in Bash
Wenn Sie eine Beziehung in Form von Schlüssel-Wert-Paaren definieren möchten, können Sie ein assoziatives Array verwenden. Sie können ein assoziatives Array mit der folgenden allgemeinen Syntax deklarieren. Beachten Sie, dass wir die Option -A
anstelle von -a
verwenden.
$ 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, dass ${fruits_prices[@]}
auf die Werte erweitert wird und ${!fruits_prices[@]}
auf die Schlüssel erweitert wird.
$ 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 entspricht nicht der Reihenfolge, 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 es empfohlen wird, arrayName[key]=value
zu verwenden, können Sie 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.
Zusammenfassen
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
arrayName=(elt1 elt2 elt3 ... eltN)
deklarieren oderdeclare -a arrayName
und dem Array Elemente hinzufügen. - Um auf die Elemente zuzugreifen, können Sie mit
${arrayName[@]}
eine Schleife durchlaufen. Alternativ erhalten Sie die Liste aller gültigen Indizes mit der Parametererweiterung${!arrayName[@]}
. - Schließlich haben Sie auch gelernt, wie man ein assoziatives Array deklariert, um Schlüssel-Wert-Paare in Bash zu speichern.
Sehen Sie sich als Nächstes das Tutorial für Schleifen in Bash an.