logo

Bash-Array

In diesem Thema demonstrieren wir die Grundlagen des Bash-Arrays und wie sie beim Bash-Shell-Skripting verwendet werden.

Ein Array kann als Sammlung ähnlicher Elementtypen definiert werden. Im Gegensatz zu den meisten Programmiersprachen müssen Arrays in Bash-Skripten nicht unbedingt eine Sammlung ähnlicher Elemente sein. Da Bash den String nicht von einer Zahl unterscheidet, kann ein Array sowohl Strings als auch Zahlen enthalten.

Bash bietet keine Unterstützung für mehrdimensionale Arrays. Wir können keine Elemente haben, die selbst Arrays sind. Bash bietet Unterstützung für eindimensionale numerisch indizierte Arrays sowie assoziative Arrays. Um vom letzten an auf das numerisch indizierte Array zuzugreifen, können wir negative Indizes verwenden. Der Index „-1“ wird als Referenz für das letzte Element betrachtet. Wir können mehrere Elemente in einem Array verwenden.

Bash-Array-Deklaration

Arrays in Bash können auf folgende Weise deklariert werden:

Numerisch indizierte Arrays erstellen

Wir können jede Variable als indiziertes Array verwenden, ohne sie zu deklarieren.

Um eine Variable explizit als Bash-Array zu deklarieren, verwenden Sie das Schlüsselwort „declare“. Die Syntax kann wie folgt definiert werden:

 declare -a ARRAY_NAME 

Wo,

ARRAY_NAME gibt den Namen an, den wir dem Array zuweisen würden.

Notiz:Die Regeln für die Benennung einer Variablen in Bash sind dieselben wie für die Benennung eines Arrays.

Eine allgemeine Methode zum Erstellen eines indizierten Arrays kann in der folgenden Form definiert werden:

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

wobei das Schlüsselwort „index“ zum Definieren positiver Ganzzahlen verwendet wird.

Assoziative Arrays erstellen

Im Gegensatz zu numerisch indizierten Arrays werden die assoziativen Arrays zunächst deklariert. Wir können das Schlüsselwort „declare“ und die Option -A (Großbuchstaben) verwenden, um die assoziativen Arrays zu deklarieren. Die Syntax kann wie folgt definiert werden:

 declare -A ARRAY_NAME 

Eine allgemeine Methode zum Erstellen eines assoziativen Arrays kann in der folgenden Form definiert 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_ zum Definieren einer beliebigen Zeichenfolge verwendet wird.

Wir können das obige Formular auch folgendermaßen schreiben:

arp-Befehl
 declare -A ARRAY_NAME ARRAY_NAME=( [index_foo]=value_foo [index_bar]=value_bar [index_xyz]=value_xyz ) 

Bash-Array-Initialisierung

Um ein Bash-Array zu initialisieren, können wir den Zuweisungsoperator (=) verwenden, indem wir die Liste der Elemente in Klammern angeben, getrennt durch Leerzeichen wie unten:

 ARRAY_NAME=(element_1st element_2nd element_Nth) 

Notiz:Hier hat das erste Element einen Index 0. Außerdem sollte um den Zuweisungsoperator (=) kein Leerzeichen stehen.

Greifen Sie auf Elemente des Bash-Arrays zu

Um auf die Elemente eines Bash-Arrays zuzugreifen, können wir die folgende Syntax verwenden:

 echo ${ARRAY_NAME[2]} 

Bash-Array drucken

Wir können das Schlüsselwort „declare“ mit der Option „-p“ verwenden, um alle Elemente eines Bash-Arrays mit allen Indizes und Details auszugeben. Die Syntax zum Drucken des Bash-Arrays kann wie folgt definiert werden:

 declare -p ARRAY_NAME 

Array-Operationen

Sobald ein Array zugewiesen ist, können wir einige nützliche Operationen daran ausführen. Wir können seine Schlüssel und Werte anzeigen und es durch Anhängen oder Entfernen der Elemente ändern:

Referenzelemente

Um auf ein einzelnes Element zu verweisen, müssen wir die Indexnummer des Elements kennen. Wir können jedes Element mit der folgenden Syntax referenzieren oder drucken:

 ${ARRAY_NAME[index]} 

Notiz:Geschweifte Klammern ${} sind erforderlich, um die Dateinamenerweiterungsoperatoren der Shell zu vermeiden.

Lassen Sie uns beispielsweise ein Element eines Arrays mit einem Index von 2 drucken:

Bash-Skript

 #!/bin/bash #Script to print an element of an array with an index of 2 #declaring the array declare -a example_array=( 'Welcome''To''Javatpoint' ) #printing the element with index of 2 echo ${example_array[2]} 

Ausgabe

 Javatpoint 

Wenn wir anstelle eines angegebenen Indexes @ oder * verwenden, wird dieser auf alle Mitglieder des Arrays erweitert. Um alle Elemente auszudrucken, können wir das folgende Formular verwenden:

Bash-Skript

 #!/bin/bash #Script to print all the elements of the array #declaring the array declare -a example_array=( 'Welcome''To''Javatpoint' ) #Printing all the elements echo '${example_array[@]}' 

Ausgabe

 Welcome to Javatpoint 

Der einzige Unterschied zwischen der Verwendung von @ und * besteht darin, dass das Formular bei Verwendung von @ in doppelte Anführungszeichen gesetzt wird. Im ersten Fall (bei Verwendung von @) liefert die Erweiterung ein Ergebnis in einem Wort für jedes Element des Arrays. Es lässt sich besser mit Hilfe der „for-Schleife“ beschreiben. Angenommen, wir haben ein Array mit drei Elementen: „Welcome“, „To“ und „Javatpoint“:

 $ example_array= (Welcome to Javatpoint) 

Anwenden einer Schleife mit @:

 for i in '${example_array[@]}'; do echo '$i'; done 

Es wird das folgende Ergebnis erzeugt:

 Welcome To Javatpoint 

Wenn Sie eine Schleife mit * anwenden, wird ein einzelnes Ergebnis erzeugt, das alle Elemente des Arrays als ein einziges Wort enthält:

 Welcome To Javatpoint 

Es ist wichtig, die Verwendung von @ und * zu verstehen, da diese bei der Verwendung des Formulars zum Durchlaufen von Array-Elementen nützlich sind.

C#-Wörterbuch

Drucken der Schlüssel eines Arrays

Anstelle ihrer jeweiligen Werte können wir auch die in indizierten oder assoziativen Arrays verwendeten Schlüssel abrufen und ausdrucken. Dies kann durch Hinzufügen des ! Operator vor dem Array-Namen wie folgt:

Polsterung CSS
 ${!ARRAY_NAME[index]} 

Beispiel

 #!/bin/bash #Script to print the keys of the array #Declaring the Array declare -a example_array=( 'Welcome''To''Javatpoint' ) #Printing the Keys echo '${!example_array[@]}' 

Ausgabe

 0 1 2 

Ermitteln der Array-Länge

Wir können die Anzahl der im Array enthaltenen Elemente zählen, indem wir das folgende Formular verwenden:

 ${#ARRAY_NAME[@]} 

Beispiel

 #!/bin/bash #Declaring the Array declare -a example_array=( 'Welcome''To''Javatpoint' ) #Printing Array Length echo 'The array contains ${#example_array[@]} elements' 

Ausgabe

 The array contains 3 elements 

Durchlaufen Sie das Array

Die allgemeine Methode zum Durchlaufen jedes Elements in einem Array ist die Verwendung der „for-Schleife“.

Beispiel

 #!/bin/bash #Script to print all keys and values using loop through the array declare -a example_array=( 'Welcome''To''Javatpoint' ) #Array Loop for i in '${!example_array[@]}' do echo The key value of element '${example_array[$i]}' is '$i' done 

Ausgabe

Bash-Array

Eine weitere gängige Methode zum Durchlaufen eines Arrays besteht darin, die Länge des Arrays abzurufen und die Schleife im C-Stil zu verwenden:

Bash-Skript

 #!/bin/bash #Script to loop through an array in C-style declare -a example_array=( &apos;Welcome&apos;&apos;To&apos;&apos;Javatpoint&apos; ) #Length of the Array length=${#example_array[@]} #Array Loop for (( i=0; i <${length}; i++ )) do echo $i ${example_array[$i]} done < pre> <p> <strong>Output</strong> </p> <img src="//techcodeview.com/img/bash-tutorial/77/bash-array-2.webp" alt="Bash Array"> <h3>Adding Elements to an Array</h3> <p>We have an option to add elements to an indexed or associative array by specifying their index or associative key respectively. To add the new element to an array in bash, we can use the following form:</p> <pre> ARRAY_NAME[index_n]=&apos;New Element&apos; </pre> <p> <strong>Example</strong> </p> <pre> #!/bin/bash #Declaring an array declare -a example_array=( &apos;Java&apos;&apos;Python&apos;&apos;PHP&apos;&apos;HTML&apos; ) #Adding new element example_array[4]=&apos;JavaScript&apos; #Printing all the elements echo &apos;${example_array[@]}&apos; </pre> <p> <strong>Output</strong> </p> <pre> Java Python PHP HTML JavaScript </pre> <p>Another method for adding a new element to an array is by using the += operator. There is no need to specify the index in this method. We can add one or multiple elements in the array by using the following way:</p> <p> <strong>Example</strong> </p> <pre> #!/bin/bash #Declaring the Array declare -a example_array=( &apos;Java&apos;&apos;Python&apos;&apos;PHP&apos; ) #Adding new elements example_array+=( JavaScript CSS SQL ) #Printing all the elements echo &apos;${example_array[@]}&apos; </pre> <p> <strong>Output</strong> </p> <pre> Java Python PHP JavaScript CSS SQL </pre> <h3>Updating Array Element</h3> <p>We can update the array element by assigning a new value to the existing array by its index value. Let&apos;s change the array element at index 4 with an element &apos;Javatpoint&apos;.</p> <p> <strong>Example</strong> </p> <pre> #!/bin/bash #Script to update array element #Declaring the array declare -a example_array=( &apos;We&apos;&apos;welcome&apos;&apos;you&apos;&apos;on&apos;&apos;SSSIT&apos; ) #Updating the Array Element example_array[4]=Javatpoint #Printig all the elements of the Array echo ${example_array[@]} </pre> <p> <strong>Output</strong> </p> <pre> We welcome you on Javatpoint </pre> <h3>Deleting an Element from an Array</h3> <p>If we want to delete the element from the array, we have to know its index or key in case of an associative array. An element can be removed by using the &apos; <strong>unset</strong> &apos; command:</p> <pre> unset ARRAY_NAME[index] </pre> <p>An example is shown below to provide you a better understanding of this concept:</p> <p> <strong>Example</strong> </p> <pre> #!/bin/bash #Script to delete the element from the array #Declaring the array declare -a example_array=( &apos;Java&apos;&apos;Python&apos;&apos;HTML&apos;&apos;CSS&apos;&apos;JavaScript&apos; ) #Removing the element unset example_array[1] #Printing all the elements after deletion echo &apos;${example_array[@]}&apos; </pre> <p> <strong>Output</strong> </p> <pre> Java HTML CSS JavaScript </pre> <p>Here, we have created a simple array consisting of five elements, &apos;Java&apos;, &apos;Python&apos;, &apos;HTML&apos;, &apos;CSS&apos; and &apos;JavaScript&apos;. Then we removed the element &apos;Python&apos; from the array by using &apos;unset&apos; and referencing the index of it. The index of element &apos;Python&apos; was &apos;1&apos;, since bash arrays start from 0. If we check the indexes of the array after removing the element, we can see that the index for the removed element is missing. We can check the indexes by adding the following command into the script:</p> <pre> echo ${!example_array[@]} </pre> <p>The output will look like:</p> <pre> 0 2 3 4 </pre> <p>This concept also works for the associative arrays.</p> <h3>Deleting the Entire Array</h3> <p>Deleting an entire array is a very simple task. It can be performed by passing the array name as an argument to the &apos; <strong>unset</strong> &apos; command without specifying the index or key.</p> <p> <strong>Example</strong> </p> <pre> #!/bin/bash #Script to delete the entire Array #Declaring the Array declare -a example_array=( &apos;Java&apos;&apos;Python&apos;&apos;HTML&apos;&apos;CSS&apos;&apos;JavaScript&apos; ) #Deleting Entire Array unset example_array #Printing the Array Elements echo ${!example_array[@]} #Printing the keys echo ${!example_array[@]} </pre> <p> <strong>Output</strong> </p> <img src="//techcodeview.com/img/bash-tutorial/77/bash-array-3.webp" alt="Bash Array"> <p>There will be no output if we try to print the content of the above script. An empty result is returned because the array doesn&apos;t exist anymore.</p> <h3>Slice Array Elements</h3> <p>Bash arrays can also be sliced from a given starting index to the ending index.</p> <p>To slice an array from starting index &apos;m&apos; to an ending index &apos;n&apos;, we can use the following syntax:</p> <pre> SLICED_ARRAY=(${ARRAY_NAME[@]:m:n}&apos;) </pre> <p> <strong>Example</strong> </p> <pre> #!/bin/bash #Script to slice Array Element from index 1 to index 3 #Declaring the Array example_array=( &apos;Java&apos;&apos;Python&apos;&apos;HTML&apos;&apos;CSS&apos;&apos;JavaScript&apos; ) #Slicing the Array sliced_array=(&apos;${example_array[@]:1:3}&apos;) #Applying for loop to iterate over each element in Array for i in &apos;${sliced_array[@]}&apos; do echo $i done </pre> <p> <strong>Output</strong> </p> <img src="//techcodeview.com/img/bash-tutorial/77/bash-array-4.webp" alt="Bash Array"> <hr></${length};>

Beispiel

 #!/bin/bash #Declaring an array declare -a example_array=( &apos;Java&apos;&apos;Python&apos;&apos;PHP&apos;&apos;HTML&apos; ) #Adding new element example_array[4]=&apos;JavaScript&apos; #Printing all the elements echo &apos;${example_array[@]}&apos; 

Ausgabe

 Java Python PHP HTML JavaScript 

Eine andere Methode zum Hinzufügen eines neuen Elements zu einem Array ist die Verwendung des Operators +=. Bei dieser Methode muss der Index nicht angegeben werden. Wir können dem Array ein oder mehrere Elemente hinzufügen, indem wir wie folgt vorgehen:

Beispiel

 #!/bin/bash #Declaring the Array declare -a example_array=( &apos;Java&apos;&apos;Python&apos;&apos;PHP&apos; ) #Adding new elements example_array+=( JavaScript CSS SQL ) #Printing all the elements echo &apos;${example_array[@]}&apos; 

Ausgabe

 Java Python PHP JavaScript CSS SQL 

Array-Element wird aktualisiert

Wir können das Array-Element aktualisieren, indem wir dem vorhandenen Array anhand seines Indexwerts einen neuen Wert zuweisen. Lassen Sie uns das Array-Element an Index 4 durch ein Element „Javatpoint“ ändern.

Beispiel

 #!/bin/bash #Script to update array element #Declaring the array declare -a example_array=( &apos;We&apos;&apos;welcome&apos;&apos;you&apos;&apos;on&apos;&apos;SSSIT&apos; ) #Updating the Array Element example_array[4]=Javatpoint #Printig all the elements of the Array echo ${example_array[@]} 

Ausgabe

 We welcome you on Javatpoint 

Löschen eines Elements aus einem Array

Wenn wir das Element aus dem Array löschen möchten, müssen wir seinen Index oder im Fall eines assoziativen Arrays seinen Schlüssel kennen. Ein Element kann mit dem Befehl ' entfernt werden. nicht gesetzt ' Befehl:

 unset ARRAY_NAME[index] 

Nachfolgend finden Sie ein Beispiel, um Ihnen ein besseres Verständnis dieses Konzepts zu vermitteln:

Beispiel

 #!/bin/bash #Script to delete the element from the array #Declaring the array declare -a example_array=( &apos;Java&apos;&apos;Python&apos;&apos;HTML&apos;&apos;CSS&apos;&apos;JavaScript&apos; ) #Removing the element unset example_array[1] #Printing all the elements after deletion echo &apos;${example_array[@]}&apos; 

Ausgabe

 Java HTML CSS JavaScript 

Hier haben wir ein einfaches Array erstellt, das aus fünf Elementen besteht: „Java“, „Python“, „HTML“, „CSS“ und „JavaScript“. Dann haben wir das Element „Python“ aus dem Array entfernt, indem wir „unset“ verwendet und auf dessen Index verwiesen haben. Der Index des Elements „Python“ war „1“, da Bash-Arrays bei 0 beginnen. Wenn wir die Indizes des Arrays nach dem Entfernen des Elements überprüfen, können wir feststellen, dass der Index für das entfernte Element fehlt. Wir können die Indizes überprüfen, indem wir den folgenden Befehl in das Skript einfügen:

 echo ${!example_array[@]} 

Die Ausgabe sieht folgendermaßen aus:

 0 2 3 4 

Dieses Konzept funktioniert auch für die assoziativen Arrays.

Löschen des gesamten Arrays

Das Löschen eines gesamten Arrays ist eine sehr einfache Aufgabe. Dies kann durch Übergabe des Array-Namens als Argument an die ' nicht gesetzt 'Befehl ohne Angabe des Index oder Schlüssels.

Beispiel

 #!/bin/bash #Script to delete the entire Array #Declaring the Array declare -a example_array=( &apos;Java&apos;&apos;Python&apos;&apos;HTML&apos;&apos;CSS&apos;&apos;JavaScript&apos; ) #Deleting Entire Array unset example_array #Printing the Array Elements echo ${!example_array[@]} #Printing the keys echo ${!example_array[@]} 

Ausgabe

So konvertieren Sie einen String in ein int-Java-Format
Bash-Array

Wenn wir versuchen, den Inhalt des obigen Skripts auszudrucken, erfolgt keine Ausgabe. Es wird ein leeres Ergebnis zurückgegeben, da das Array nicht mehr existiert.

Slice-Array-Elemente

Bash-Arrays können auch von einem bestimmten Startindex bis zum Endindex aufgeteilt werden.

Um ein Array vom Startindex „m“ bis zum Endindex „n“ aufzuteilen, können wir die folgende Syntax verwenden:

 SLICED_ARRAY=(${ARRAY_NAME[@]:m:n}&apos;) 

Beispiel

 #!/bin/bash #Script to slice Array Element from index 1 to index 3 #Declaring the Array example_array=( &apos;Java&apos;&apos;Python&apos;&apos;HTML&apos;&apos;CSS&apos;&apos;JavaScript&apos; ) #Slicing the Array sliced_array=(&apos;${example_array[@]:1:3}&apos;) #Applying for loop to iterate over each element in Array for i in &apos;${sliced_array[@]}&apos; do echo $i done 

Ausgabe

Bash-Array