logo

Bash-array

In dit onderwerp demonstreren we de basisprincipes van bash-array en hoe deze worden gebruikt in bash-shell-scripts.

Een array kan worden gedefinieerd als een verzameling van vergelijkbare typen elementen. In tegenstelling tot de meeste programmeertalen hoeven arrays bij bash-scripting niet een verzameling vergelijkbare elementen te zijn. Omdat Bash de string niet van een getal onderscheidt, kan een array zowel strings als getallen bevatten.

Bash biedt geen ondersteuning voor de multidimensionale arrays; we kunnen niet de elementen hebben die op zichzelf arrays zijn. Bash biedt ondersteuning voor eendimensionale numeriek geïndexeerde arrays en associatieve arrays. Om toegang te krijgen tot de numeriek geïndexeerde array van de laatste, kunnen we negatieve indices gebruiken. De index '-1' zal als referentie voor het laatste element worden beschouwd. We kunnen verschillende elementen in een array gebruiken.

Bash Array-verklaring

Arrays in Bash kunnen op de volgende manieren worden gedeclareerd:

Numeriek geïndexeerde arrays maken

We kunnen elke variabele als een geïndexeerde array gebruiken zonder deze te declareren.

Om een ​​variabele expliciet als een Bash Array te declareren, gebruikt u het sleutelwoord 'declare' en de syntaxis kan als volgt worden gedefinieerd:

 declare -a ARRAY_NAME 

waar,

ARRAY_NAME geeft de naam aan die we aan de array zouden toewijzen.

Opmerking:De regels voor het benoemen van een variabele in Bash zijn hetzelfde voor het benoemen van een array.

Een algemene methode om een ​​geïndexeerde array te maken kan in de volgende vorm worden gedefinieerd:

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

waarbij het trefwoord 'index' wordt gebruikt om positieve gehele getallen te definiëren.

Associatieve arrays maken

In tegenstelling tot numeriek geïndexeerde arrays worden eerst de associatieve arrays gedeclareerd. We kunnen het trefwoord 'declare' en de optie -A (hoofdletters) gebruiken om de associatieve arrays te declareren. De syntaxis kan worden gedefinieerd als:

 declare -A ARRAY_NAME 

Een algemene methode om een ​​associatieve array te maken kan in de volgende vorm worden gedefinieerd:

 declare -A ARRAY_NAME ARRAY_NAME[index_foo]=value_foo ARRAY_NAME[index_bar]=value_bar ARRAY_NAME[index_xyz]=value_xyz 

waarbij index_ wordt gebruikt om een ​​willekeurige tekenreeks te definiëren.

We kunnen het bovenstaande formulier ook op de volgende manier schrijven:

Rudyard Kipling als uitleg
 declare -A ARRAY_NAME ARRAY_NAME=( [index_foo]=value_foo [index_bar]=value_bar [index_xyz]=value_xyz ) 

Bash Array-initialisatie

Om een ​​Bash Array te initialiseren, kunnen we de toewijzingsoperator (=) gebruiken, door de lijst met elementen tussen haakjes op te geven, gescheiden door spaties, zoals hieronder:

 ARRAY_NAME=(element_1st element_2nd element_Nth) 

Opmerking:Hier heeft het eerste element de index 0. Er mag ook geen spatie staan ​​rond de toewijzingsoperator (=).

Toegang tot elementen van Bash Array

Om toegang te krijgen tot de elementen van een Bash Array, kunnen we de volgende syntaxis gebruiken:

verbinding java-mysql
 echo ${ARRAY_NAME[2]} 

Bash-array afdrukken

We kunnen het sleutelwoord 'declare' gebruiken met een '-p' optie om alle elementen van een Bash Array af te drukken met alle indexen en details. De syntaxis voor het afdrukken van de Bash Array kan als volgt worden gedefinieerd:

 declare -p ARRAY_NAME 

Array-bewerkingen

Zodra een array is toegewezen, kunnen we er enkele nuttige bewerkingen op uitvoeren. We kunnen de sleutels en waarden ervan weergeven en deze wijzigen door elementen toe te voegen of te verwijderen:

Referentie-elementen

Om naar een enkel element te verwijzen, moeten we het indexnummer van het element kennen. We kunnen naar elk element verwijzen of afdrukken met behulp van de volgende syntaxis:

 ${ARRAY_NAME[index]} 

Opmerking:Accolades ${} zijn vereist om de uitbreidingsoperatoren voor bestandsnamen van shell te vermijden.

Laten we bijvoorbeeld een element van een array afdrukken met een index van 2:

Bash-script

 #!/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]} 

Uitvoer

 Javatpoint 

Als we @ of * gebruiken in plaats van een opgegeven index, wordt deze uitgebreid naar alle leden van de array. Om alle elementen af ​​te drukken, kunnen we het volgende formulier gebruiken:

Bash-script

 #!/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[@]}' 

Uitvoer

 Welcome to Javatpoint 

Het enige verschil tussen het gebruik van @ en * is dat het formulier tussen dubbele aanhalingstekens staat als u @ gebruikt. In het eerste geval (bij gebruik van @) levert de uitbreiding een resultaat op in de vorm van een woord voor elk element van de array. Het kan beter worden beschreven met behulp van 'for loop'. Stel dat we een array hebben met drie elementen, 'Welcome', 'To' en 'Javatpoint':

 $ example_array= (Welcome to Javatpoint) 

Een lus toepassen met @:

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

Het zal het volgende resultaat opleveren:

 Welcome To Javatpoint 

Als u een lus met * toepast, wordt er één resultaat verkregen dat alle elementen van de array als één woord bevat:

 Welcome To Javatpoint 

Het is belangrijk om het gebruik van @ en * te begrijpen, omdat dit handig is bij het gebruik van het formulier om door array-elementen te itereren.

De sleutels van een array afdrukken

We kunnen ook de sleutels ophalen en afdrukken die worden gebruikt in geïndexeerde of associatieve arrays, in plaats van hun respectieve waarden. Dit kan worden uitgevoerd door het toevoegen van de ! operator vóór de arraynaam, zoals hieronder:

sql-gegevenstypen
 ${!ARRAY_NAME[index]} 

Voorbeeld

 #!/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[@]}' 

Uitvoer

 0 1 2 

Arraylengte vinden

We kunnen het aantal elementen in de array tellen met behulp van het volgende formulier:

 ${#ARRAY_NAME[@]} 

Voorbeeld

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

Uitvoer

 The array contains 3 elements 

Loop door de array

De algemene methode om elk item in een array te herhalen is door gebruik te maken van de 'for-lus'.

Voorbeeld

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

Uitvoer

Bash-array

Een andere veelgebruikte methode om door een array te lopen, is door de lengte van de array op te halen en de C-stijl lus te gebruiken:

Bash-script

 #!/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};>

Voorbeeld

 #!/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; 

Uitvoer

 Java Python PHP HTML JavaScript 

Een andere methode om een ​​nieuw element aan een array toe te voegen is door de operator += te gebruiken. Bij deze methode hoeft u de index niet op te geven. We kunnen een of meerdere elementen aan de array toevoegen door de volgende manier te gebruiken:

Voorbeeld

 #!/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; 

Uitvoer

 Java Python PHP JavaScript CSS SQL 

Array-element bijwerken

We kunnen het array-element bijwerken door een nieuwe waarde aan de bestaande array toe te wijzen op basis van de indexwaarde. Laten we het array-element op index 4 veranderen met een element 'Javatpoint'.

Voorbeeld

 #!/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[@]} 

Uitvoer

 We welcome you on Javatpoint 

Een element uit een array verwijderen

Als we het element uit de array willen verwijderen, moeten we de index of sleutel kennen in het geval van een associatieve array. Een element kan worden verwijderd met behulp van de ' uitgeschakeld ' commando:

 unset ARRAY_NAME[index] 

Hieronder vindt u een voorbeeld om u een beter begrip van dit concept te geven:

Voorbeeld

Java-variabele variabele
 #!/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; 

Uitvoer

 Java HTML CSS JavaScript 

Hier hebben we een eenvoudige array gemaakt die bestaat uit vijf elementen: 'Java', 'Python', 'HTML', 'CSS' en 'JavaScript'. Vervolgens hebben we het element 'Python' uit de array verwijderd door 'unset' te gebruiken en naar de index ervan te verwijzen. De index van element 'Python' was '1', aangezien bash-arrays beginnen vanaf 0. Als we de indexen van de array controleren na het verwijderen van het element, kunnen we zien dat de index voor het verwijderde element ontbreekt. We kunnen de indexen controleren door de volgende opdracht aan het script toe te voegen:

 echo ${!example_array[@]} 

De uitvoer ziet er als volgt uit:

 0 2 3 4 

Dit concept werkt ook voor de associatieve arrays.

De hele array verwijderen

Het verwijderen van een volledige array is een heel eenvoudige taak. Dit kan worden uitgevoerd door de arraynaam als argument door te geven aan de ' uitgeschakeld ' commando zonder de index of sleutel op te geven.

Voorbeeld

 #!/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[@]} 

Uitvoer

Bash-array

Er zal geen uitvoer zijn als we de inhoud van het bovenstaande script proberen af ​​te drukken. Er wordt een leeg resultaat geretourneerd omdat de array niet meer bestaat.

Segmentarray-elementen

Bash-arrays kunnen ook worden opgedeeld van een bepaalde startindex naar de eindindex.

Om een ​​array te segmenteren van de startindex 'm' naar de eindindex 'n', kunnen we de volgende syntaxis gebruiken:

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

Voorbeeld

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

Uitvoer

Bash-array