logo

Bash Array

Tässä aiheessa esittelemme bash-taulukon perusteet ja kuinka niitä käytetään bash shell -skriptauksessa.

Taulukko voidaan määritellä kokoelmaksi samantyyppisiä elementtejä. Toisin kuin useimmat ohjelmointikielet, bash-komentosarjan taulukoiden ei tarvitse olla samanlaisten elementtien kokoelma. Koska Bash ei erota merkkijonoa numerosta, taulukko voi sisältää sekä merkkijonoja että numeroita.

Bash ei tarjoa tukea moniulotteisille taulukoille; meillä ei voi olla elementtejä, jotka ovat taulukoita itsessään. Bash tukee yksiulotteisia numeerisesti indeksoituja taulukoita sekä assosiatiivisia taulukoita. Päästäksemme numeerisesti indeksoituun taulukkoon viimeisestä, voimme käyttää negatiivisia indeksejä. Indeksiä '-1' pidetään viitteenä viimeiselle elementille. Voimme käyttää useita elementtejä taulukossa.

Bash Array -ilmoitus

Bashin taulukot voidaan ilmoittaa seuraavilla tavoilla:

Numeerisesti indeksoitujen taulukoiden luominen

Voimme käyttää mitä tahansa muuttujaa indeksoituna taulukkona ilmoittamatta sitä.

Jos haluat nimetä muuttujan Bash-taulukoksi, käytä avainsanaa 'declare' ja syntaksi voidaan määrittää seuraavasti:

 declare -a ARRAY_NAME 

missä,

ARRAY_NAME ilmaisee nimen, jonka antaisimme taulukolle.

Huomautus:Muuttujan nimeämissäännöt Bashissa ovat samat taulukon nimeämisessä.

Yleinen menetelmä indeksoidun taulukon luomiseksi voidaan määrittää seuraavassa muodossa:

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

jossa avainsanaa 'indeksi' käytetään positiivisten kokonaislukujen määrittämiseen.

Assosiatiivisten taulukoiden luominen

Toisin kuin numeerisesti indeksoidut taulukot, assosiatiiviset taulukot ilmoitetaan ensin. Voimme käyttää avainsanaa 'declare' ja -A (isot kirjaimet) assosiatiivisten taulukoiden ilmoittamiseen. Syntaksi voidaan määritellä seuraavasti:

 declare -A ARRAY_NAME 

Yleinen menetelmä assosiatiivisen taulukon luomiseksi voidaan määrittää seuraavassa muodossa:

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

jossa index_ käytetään minkä tahansa merkkijonon määrittämiseen.

Voimme myös kirjoittaa yllä olevan lomakkeen seuraavasti:

merkkijonomenetelmiä
 declare -A ARRAY_NAME ARRAY_NAME=( [index_foo]=value_foo [index_bar]=value_bar [index_xyz]=value_xyz ) 

Bash Array -alustus

Bash-taulukon alustamiseksi voimme käyttää määritysoperaattoria (=) määrittämällä luettelon elementeistä suluissa, erotettuina välilyönneillä, kuten alla:

 ARRAY_NAME=(element_1st element_2nd element_Nth) 

Huomautus:Tässä ensimmäisen elementin indeksi on 0. Myöskään osoitusoperaattorin (=) ympärillä ei saa olla tilaa.

Access Elements of Bash Array

Voimme käyttää Bash Array -elementtejä käyttämällä seuraavaa syntaksia:

 echo ${ARRAY_NAME[2]} 

Tulosta Bash Array

Voimme käyttää avainsanaa 'declare' ja '-p' tulostaa kaikki Bash Array -elementit kaikilla indekseillä ja yksityiskohdilla. Bash-taulukon tulostuksen syntaksi voidaan määrittää seuraavasti:

 declare -p ARRAY_NAME 

Array Operations

Kun taulukko on määritetty, voimme suorittaa sille hyödyllisiä toimintoja. Voimme näyttää sen avaimet ja arvot sekä muokata sitä lisäämällä tai poistamalla elementtejä:

Viiteelementit

Jotta voimme viitata yhteen elementtiin, meidän on tiedettävä elementin indeksinumero. Voimme viitata tai tulostaa minkä tahansa elementin käyttämällä seuraavaa syntaksia:

 ${ARRAY_NAME[index]} 

Huomautus:Aaltosulkeet ${} tarvitaan, jotta vältetään shellin tiedostonimien laajennusoperaattorit.

Tulostetaan esimerkiksi taulukon elementti, jonka indeksi on 2:

Bash-skripti

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

Lähtö

 Javatpoint 

Jos käytämme @ tai * tietyn indeksin sijasta, se laajenee kaikkiin taulukon jäseniin. Voit tulostaa kaikki elementit käyttämällä seuraavaa lomaketta:

Bash-skripti

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

Lähtö

 Welcome to Javatpoint 

Ainoa ero @:n ja *:n välillä on, että lomake on ympäröity lainausmerkeillä @-käytön aikana. Ensimmäisessä tapauksessa (käytettäessä @-merkkiä) laajennus antaa tuloksen sanalla jokaiselle taulukon elementille. Sitä voidaan kuvata paremmin 'for silmukan' avulla. Oletetaan, että meillä on taulukko, jossa on kolme elementtiä, 'Tervetuloa', 'To' ja 'Javatpoint':

 $ example_array= (Welcome to Javatpoint) 

Silmukan käyttäminen @:lla:

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

Se tuottaa seuraavan tuloksen:

merkkijono korvaa kaikki java
 Welcome To Javatpoint 

Kun käytät silmukkaa *:lla, saadaan yksi tulos, joka sisältää kaikki taulukon elementit yhtenä sanana:

 Welcome To Javatpoint 

On tärkeää ymmärtää @:n ja *:n käyttö, koska se on hyödyllistä käytettäessä lomaketta taulukon elementtien iterointiin.

Taulukon avainten tulostaminen

Voimme myös noutaa ja tulostaa indeksoiduissa tai assosiatiivisissa taulukoissa käytetyt avaimet vastaavien arvojen sijaan. Se voidaan suorittaa lisäämällä ! operaattori ennen taulukon nimeä seuraavasti:

livecricket.is
 ${!ARRAY_NAME[index]} 

Esimerkki

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

Lähtö

 0 1 2 

Taulukon pituuden löytäminen

Voimme laskea taulukon sisältämien elementtien määrän käyttämällä seuraavaa muotoa:

 ${#ARRAY_NAME[@]} 

Esimerkki

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

Lähtö

 The array contains 3 elements 

Kierrä taulukon läpi

Yleinen tapa iteroida taulukon jokaisen kohteen yli on käyttää 'for-silmukkaa'.

Esimerkki

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

Lähtö

Bash Array

Toinen yleinen tapa silmukoida taulukon läpi on hakea taulukon pituus ja käyttää C-tyylistä silmukkaa:

Bash-skripti

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

Esimerkki

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

Lähtö

 Java Python PHP HTML JavaScript 

Toinen tapa lisätä uusi elementti taulukkoon on käyttää +=-operaattoria. Tässä menetelmässä indeksiä ei tarvitse määrittää. Voimme lisätä yhden tai useita elementtejä taulukkoon seuraavalla tavalla:

Esimerkki

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

Lähtö

 Java Python PHP JavaScript CSS SQL 

Array Elementin päivittäminen

Voimme päivittää taulukkoelementin antamalla olemassa olevalle taulukolle uuden arvon sen indeksiarvon mukaan. Muutetaan taulukon elementti indeksissä 4 elementillä 'Javatpoint'.

Esimerkki

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

Lähtö

 We welcome you on Javatpoint 

Elementin poistaminen taulukosta

Jos haluamme poistaa elementin taulukosta, meidän on tiedettävä sen indeksi tai avain assosiatiivisen taulukon tapauksessa. Elementin voi poistaa käyttämällä ' pois päältä 'komento:

char merkkijonoon
 unset ARRAY_NAME[index] 

Alla on esimerkki, joka antaa sinulle paremman käsityksen tästä käsitteestä:

Esimerkki

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

Lähtö

 Java HTML CSS JavaScript 

Täällä olemme luoneet yksinkertaisen taulukon, joka koostuu viidestä elementistä, 'Java', 'Python', 'HTML', 'CSS' ja 'JavaScript'. Sitten poistimme elementin 'Python' taulukosta käyttämällä 'unset' ja viittaamalla sen indeksiin. Elementin 'Python' indeksi oli '1', koska bash-taulukot alkavat nollasta. Jos tarkistamme taulukon indeksit elementin poistamisen jälkeen, voimme nähdä, että poistetun elementin indeksi puuttuu. Voimme tarkistaa indeksit lisäämällä skriptiin seuraavan komennon:

 echo ${!example_array[@]} 

Tulos näyttää tältä:

 0 2 3 4 

Tämä konsepti toimii myös assosiatiivisten taulukoiden kanssa.

Koko taulukon poistaminen

Koko taulukon poistaminen on hyvin yksinkertainen tehtävä. Se voidaan suorittaa välittämällä taulukon nimi argumenttina ' pois päältä ' -komentoa määrittämättä indeksiä tai avainta.

Esimerkki

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

Lähtö

Bash Array

Tulostetta ei tule, jos yritämme tulostaa yllä olevan skriptin sisällön. Tyhjä tulos palautetaan, koska taulukkoa ei ole enää olemassa.

Leikkaa Array Elements

Bash-taulukoita voidaan myös leikata tietystä aloitusindeksistä loppuindeksiin.

Jos haluat jakaa taulukon aloitusindeksistä 'm' loppuindeksiin 'n', voimme käyttää seuraavaa syntaksia:

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

Esimerkki

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

Lähtö

Bash Array