Ein Leitfaden für Bash-Arrays

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 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!

⚙ Lust mitzucodieren? Hier sind die Voraussetzungen:

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 der 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 Preise erstellen, eine Reihe von Zahlen.

$ prices=(24 27 18 30 15)

Wie in der Syntax erwähnt, werden die Zahlen im Preis-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 von $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.

  Wie teste ich, ob eine Website HTTP/3 unterstützt?

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 $prices durch 24 ersetzt, das erste Element im Array und [1] wird als solches ausgedruckt.

Um das Element an einem bestimmten Index auszudrucken, können Sie die Parametererweiterung der Form ${prices[index]}.

$ 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[@]}.

$ 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 {Preise[@]} wird auf alle Elemente im Preis-Array erweitert. Und ${Preise[@]} 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 echo-Befehl 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 Preis-Array enthält 5 Elemente, also beginnt der Index bei 0 und geht bis 4.

  Verständnis von Compliance SOC 1 vs. SOC 2 vs. SOC 3

Als nächstes können wir die Liste der Indizes durchlaufen und auf das Element an jedem Index zugreifen. Für Index i, ${Preise[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.

Elemente an ein Bash-Array anhängen

Im Preis-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 Preis-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?

  Was ist Browser Address Error Redirector: ERR-TOO MANY REDIRECTS?

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[@]} erweitert sich zu den Werten und ${!fruits_prices[@]} wird auf die Tasten erweitert.

$ 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 Index-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

Es wird jedoch empfohlen, arrayName zu verwenden[key]=Wert, 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.

Zusammenfassen

Ich hoffe, Sie verstehen jetzt, wie Sie Bash-Arrays erstellen und damit arbeiten. Hier ist ein kurzer Überblick über das, was Sie gelernt haben.

  • Sie können ein indiziertes Array in Bash mit der Syntax arrayName=(elt1 elt2 elt3 … eltN) deklarieren oder deklarieren -a arrayName ausführen und dem Array Elemente hinzufügen.
  • Um auf die Elemente zuzugreifen, können Sie mit ${arrayName durchlaufen[@]}. 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.

Sehen Sie sich als Nächstes das Tutorial für Schleifen in Bash an.