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ö
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=( '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};>
Esimerkki
#!/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[@]}'
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=( 'Java''Python''PHP' ) #Adding new elements example_array+=( JavaScript CSS SQL ) #Printing all the elements echo '${example_array[@]}'
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=( 'We''welcome''you''on''SSSIT' ) #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=( 'Java''Python''HTML''CSS''JavaScript' ) #Removing the element unset example_array[1] #Printing all the elements after deletion echo '${example_array[@]}'
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=( 'Java''Python''HTML''CSS''JavaScript' ) #Deleting Entire Array unset example_array #Printing the Array Elements echo ${!example_array[@]} #Printing the keys echo ${!example_array[@]}
Lähtö
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}')
Esimerkki
#!/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
Lähtö
${length};>