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
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=( 'Welcome''To''Javatpoint' ) #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]='New Element' </pre> <p> <strong>Example</strong> </p> <pre> #!/bin/bash #Declaring an array declare -a example_array=( 'Java''Python''PHP''HTML' ) #Adding new element example_array[4]='JavaScript' #Printing all the elements echo '${example_array[@]}' </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=( 'Java''Python''PHP' ) #Adding new elements example_array+=( JavaScript CSS SQL ) #Printing all the elements echo '${example_array[@]}' </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's change the array element at index 4 with an element 'Javatpoint'.</p> <p> <strong>Example</strong> </p> <pre> #!/bin/bash #Script to update array element #Declaring the array declare -a example_array=( 'We''welcome''you''on''SSSIT' ) #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 ' <strong>unset</strong> ' 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=( 'Java''Python''HTML''CSS''JavaScript' ) #Removing the element unset example_array[1] #Printing all the elements after deletion echo '${example_array[@]}' </pre> <p> <strong>Output</strong> </p> <pre> Java HTML CSS JavaScript </pre> <p>Here, we have created a simple array consisting of five elements, 'Java', 'Python', 'HTML', 'CSS' and 'JavaScript'. Then we removed the element 'Python' from the array by using 'unset' and referencing the index of it. The index of element 'Python' was '1', 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 ' <strong>unset</strong> ' 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=( 'Java''Python''HTML''CSS''JavaScript' ) #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'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 'm' to an ending index 'n', we can use the following syntax:</p> <pre> SLICED_ARRAY=(${ARRAY_NAME[@]:m:n}') </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=( 'Java''Python''HTML''CSS''JavaScript' ) #Slicing the Array sliced_array=('${example_array[@]:1:3}') #Applying for loop to iterate over each element in Array for i in '${sliced_array[@]}' 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=( 'Java''Python''PHP''HTML' ) #Adding new element example_array[4]='JavaScript' #Printing all the elements echo '${example_array[@]}'
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=( 'Java''Python''PHP' ) #Adding new elements example_array+=( JavaScript CSS SQL ) #Printing all the elements echo '${example_array[@]}'
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=( 'We''welcome''you''on''SSSIT' ) #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=( 'Java''Python''HTML''CSS''JavaScript' ) #Removing the element unset example_array[1] #Printing all the elements after deletion echo '${example_array[@]}'
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=( 'Java''Python''HTML''CSS''JavaScript' ) #Deleting Entire Array unset example_array #Printing the Array Elements echo ${!example_array[@]} #Printing the keys echo ${!example_array[@]}
Uitvoer
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}')
Voorbeeld
#!/bin/bash #Script to slice Array Element from index 1 to index 3 #Declaring the Array example_array=( 'Java''Python''HTML''CSS''JavaScript' ) #Slicing the Array sliced_array=('${example_array[@]:1:3}') #Applying for loop to iterate over each element in Array for i in '${sliced_array[@]}' do echo $i done
Uitvoer
${length};>