GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Bash-Arrays

Arrays sind eine der am häufigsten verwendeten und grundlegendsten Datenstrukturen. Sie können sich ein Array als eine Variable vorstellen, die mehrere Variablen darin speichern kann.

In diesem Artikel behandeln wir die Bash-Arrays und erklären, wie Sie sie in Ihren Bash-Skripten verwenden.

Bash-Arrays #

Bash unterstützt eindimensionale, numerisch indizierte und assoziative Array-Typen. Numerische Arrays werden mit ganzen Zahlen referenziert, und assoziative werden mit Strings referenziert.

Auf numerisch indizierte Arrays kann am Ende mit negativen Indizes zugegriffen werden, dem Index von -1 verweist auf das letzte Element. Die Indizes müssen nicht zusammenhängend sein.

Im Gegensatz zu den meisten Programmiersprachen müssen Bash-Array-Elemente nicht denselben Datentyp haben. Sie können ein Array erstellen, das sowohl Zeichenfolgen als auch Zahlen enthält.

Bash unterstützt keine mehrdimensionalen Arrays und Sie können keine Array-Elemente haben, die auch Arrays sind.

Die maximale Anzahl von Elementen, die in einem Array gespeichert werden können, ist unbegrenzt.

Bash-Arrays erstellen #

Arrays in Bash können auf verschiedene Arten initialisiert werden.

Numerisch indizierte Arrays erstellen #

Bash-Variablen sind untypisiert, jede Variable kann als indiziertes Array verwendet werden, ohne sie zu deklarieren.

Um ein Array explizit zu deklarieren, verwenden Sie die eingebaute Deklaration:

declare -a array_name

Eine Möglichkeit, ein indiziertes Array zu erstellen, ist die Verwendung des folgenden Formulars:

array_name[index_1]=value_1
array_name[index_2]=value_2
array_name[index_n]=value_n

Wobei index_* ist eine positive ganze Zahl.

Eine andere Möglichkeit, ein numerisches Array zu erstellen, besteht darin, die Liste der Elemente in Klammern anzugeben, getrennt durch Leerzeichen:

array_name=( element_1 element_2 element_N )

Wenn das Array mit dem obigen Formular erstellt wird, beginnt die Indizierung bei Null, d. h. das erste Element hat einen Index von 0 .

Assoziative Arrays erstellen #

Im Gegensatz zu numerisch indizierten Arrays müssen die assoziativen Arrays deklariert werden, bevor sie verwendet werden können.

Um ein assoziatives Array zu deklarieren, verwenden Sie declare eingebaut mit dem -A (Großbuchstaben) Option:

declare -A array_name

Assoziative Arrays können in folgender Form erstellt werden:

declare -A array_name

array_name[index_foo]=value_foo
array_name[index_bar]=value_bar
array_name[index_xyz]=value_xyz

Wobei index_* kann eine beliebige Zeichenfolge sein.

Sie können auch ein assoziatives Array mit dem folgenden Formular erstellen:

declare -A array_name

array_name=( 
  [index_foo]=value_foo 
  [index_bar]=value_bar 
  [index_xyz]=value_xyz 
)

Array-Operationen #

Die Syntax von Bash-Arrays mag auf den ersten Blick etwas seltsam aussehen, wird aber nach dem Lesen dieses Artikels sinnvoller.

Referenzelemente #

Um auf ein einzelnes Element zu verweisen, müssen Sie den Elementindex kennen.

Jedes Element kann mit der folgenden Syntax referenziert werden:

${array_name[index]}
Die Syntax für den Zugriff auf ein Array-Element ähnelt der Syntax der meisten Programmiersprachen. Die geschweiften Klammern ${} sind erforderlich, um die Dateinamenerweiterungsoperatoren der Shell zu vermeiden.

Lassen Sie uns das Element mit dem Index 1 drucken :

## declare the array
declare -a my_array=( "Hydrogen" "Helium" "Lithium" "Beryllium" )

## print element
echo ${my_array[1]}
Helium

Wenn Sie @ verwenden oder * als Index erweitert sich das Wort auf alle Mitglieder des Arrays. Um alle Elemente zu drucken, verwenden Sie:

## declare the array
declare -a my_array=( "Hydrogen" "Helium" "Lithium" "Beryllium" )

## print all elements
echo "${my_array[@]}"
Hydrogen Helium Lithium Beryllium

Der einzige Unterschied zwischen @ und * ist bei der Form ${my_array[x]} ist in doppelte Anführungszeichen eingeschlossen. In diesem Fall * wird zu einem einzelnen Wort erweitert, wobei Array-Elemente durch Leerzeichen getrennt werden. @ erweitert jedes Array-Element zu einem separaten Wort. Dies ist besonders wichtig, wenn das Formular zum Analphabeten durch Array-Elemente verwendet wird.

Um die Schlüssel des Arrays auszugeben, fügen Sie ! hinzu Operator vor dem Array-Namen:

${!array_name[index]}

Hier ist ein Beispiel:

## declare the array
declare -a my_array=( "Hydrogen" "Helium" "Lithium" "Beryllium" )

## print all elements
echo "${!my_array[@]}"
0 1 2 3

Array-Länge #

Um die Länge eines Arrays zu erhalten, verwenden Sie das folgende Formular:

${#array_name[@]}
Die Syntax ist dieselbe wie beim Verweis auf alle Elemente mit dem Zusatz # Zeichen vor dem Array-Namen.
## declare the array
declare -a my_array=( "Hydrogen" "Helium" "Lithium" "Beryllium" )

## array Length
echo ${#my_array[@]}
4

Durchlaufe das Array #

Die gebräuchlichste Art, über jedes Element in einem Array zu iterieren, ist die Verwendung der for-Schleife:

declare -a my_array=( "Hydrogen" "Helium" "Lithium" "Beryllium" )

## Array Loop
for i in "${my_array[@]}"
do 
  echo "$i"
done

Der obige Code iteriert über das Array und gibt jedes Element in einer neuen Zeile aus:

Hydrogen
Helium
Lithium
Beryllium

Hier ist ein Beispiel, wie alle Schlüssel und Werte gedruckt werden:

declare -a my_array=( "Hydrogen" "Helium" "Lithium" "Beryllium" )

## Array Loop
for i in "${!my_array[@]}"
do
  echo "$i" "${my_array[$i]}"
done
0 Hydrogen
1 Helium
2 Lithium
3 Beryllium

Eine andere Möglichkeit, ein Array zu durchlaufen, besteht darin, die Länge des Arrays abzurufen und den C style zu verwenden Schleife:

declare -a my_array=( "Hydrogen" "Helium" "Lithium" "Beryllium" )

# Length of the array
length=${#my_array[@]}

# Array Loop
for (( i=0; i < ${length}; i++ ))
do
  echo $i ${my_array[$i]}
done
0 Hydrogen
1 Helium
2 Lithium
3 Beryllium

Neues Element hinzufügen #

Um ein neues Element zu einem Bash-Array hinzuzufügen und seinen Index anzugeben, verwenden Sie das folgende Formular:

my_array[index_n]="New Element"

Hier ist ein Beispiel:

declare -a my_array=( "Hydrogen" "Helium" "Lithium" "Beryllium" )

## add new element
my_array[9]="Aluminum"

## print all elements
echo "${my_array[@]}"
Hydrogen Helium Lithium Beryllium Aluminum

Eine andere Möglichkeit, einem Array ein neues Element hinzuzufügen, ohne den Index anzugeben, ist die Verwendung von += Operator. Sie können ein oder mehrere Elemente hinzufügen:

declare -a my_array=( "Hydrogen" "Helium" "Lithium" "Beryllium" )

## add new elements
my_array+=( Cobalt Nickel )

## print all elements
echo "${my_array[@]}"
Hydrogen Helium Lithium Beryllium Cobalt Nickel

Lösche ein Element #

Um ein einzelnes Element zu löschen, müssen Sie den Elementindex kennen. Ein Element kann mit unset entfernt werden Befehl:

unset my_array[index]

Sehen wir uns ein Beispiel an:

declare -a my_array=( "Hydrogen" "Helium" "Lithium" "Beryllium" )

## remove element
unset my_array[2]

## print all elements
echo "${my_array[@]}"
Hydrogen Helium Beryllium

Schlussfolgerung #

Wir haben erklärt, wie man numerisch indizierte und assoziative Arrays erstellt. Wir haben auch gezeigt, wie man durch die Arrays iteriert, die Arraylänge berechnet und Elemente hinzufügt und entfernt.

Wenn Sie Fragen oder Feedback haben, können Sie gerne einen Kommentar hinterlassen.


Linux
  1. Einzelne Klammer in der Bash-Variablenzuweisung?

  2. Bash-Arrays mit Beispielen

  3. Das ultimative Bash-Array-Tutorial mit 15 Beispielen

  4. Konvertieren Sie die Ausgabe von bash `ls` in ein json-Array

  5. Bash-Arrays und negative Indizes, ja oder nein?

Bash Shebang

Assoziatives Array in Bash

Bash-Scripting – Assoziatives Array mit Beispielen erklärt

Bash-Anfängerserie Nr. 4:Verwenden von Arrays in Bash

Bash erfasst die Ausgabe von awk in ein Array

So deklarieren Sie ein 2D-Array in Bash