logo

Bash Array

V tej temi bomo prikazali osnove matrike bash in kako se uporabljajo v skriptni lupini bash.

Matriko lahko definiramo kot zbirko podobnih tipov elementov. Za razliko od večine programskih jezikov ni nujno, da so nizi v skriptih bash zbirka podobnih elementov. Ker Bash ne loči niza od števila, lahko matrika vsebuje tako nize kot številke.

Bash ne zagotavlja podpore za večdimenzionalna polja; ne moremo imeti elementov, ki so sami po sebi nizi. Bash nudi podporo za enodimenzionalne številčno indeksirane nize in asociativne nize. Za dostop do številčno indeksirane matrike iz zadnjega lahko uporabimo negativne indekse. Indeks '-1' bo upoštevan kot referenca za zadnji element. V nizu lahko uporabimo več elementov.

Deklaracija matrike Bash

Matrike v Bashu je mogoče deklarirati na naslednje načine:

Ustvarjanje numerično indeksiranih nizov

Vsako spremenljivko lahko uporabimo kot indeksirano polje, ne da bi jo deklarirali.

Če želite izrecno deklarirati spremenljivko kot matriko Bash, uporabite ključno besedo 'declare' in sintakso lahko definirate kot:

 declare -a ARRAY_NAME 

kje,

ARRAY_NAME označuje ime, ki bi ga dodelili matriki.

Opomba:Pravila poimenovanja spremenljivke v Bashu so enaka za poimenovanje matrike.

Splošno metodo za ustvarjanje indeksirane matrike je mogoče definirati v naslednji obliki:

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

kjer se ključna beseda 'index' uporablja za definiranje pozitivnih celih števil.

Ustvarjanje asociativnih nizov

Za razliko od številčno indeksiranih nizov so asociativni nizi najprej deklarirani. Za deklaracijo asociativnih nizov lahko uporabimo ključno besedo 'declare' in možnost -A (velike črke). Sintakso lahko definiramo kot:

 declare -A ARRAY_NAME 

Splošno metodo za ustvarjanje asociativnega polja je mogoče definirati v naslednji obliki:

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

kjer se index_ uporablja za definiranje katerega koli niza.

Zgornji obrazec lahko zapišemo tudi na naslednji način:

kolesce miške se ne pomika pravilno
 declare -A ARRAY_NAME ARRAY_NAME=( [index_foo]=value_foo [index_bar]=value_bar [index_xyz]=value_xyz ) 

Inicializacija niza Bash

Za inicializacijo matrike Bash lahko uporabimo operator dodelitve (=), tako da določimo seznam elementov v oklepajih, ločenih s presledki, kot je spodaj:

 ARRAY_NAME=(element_1st element_2nd element_Nth) 

Opomba:Tu bo imel prvi element indeks 0. Prav tako ne sme biti presledka okoli operatorja dodelitve (=).

Dostop do elementov Bash Array

Za dostop do elementov matrike Bash lahko uporabimo naslednjo sintakso:

 echo ${ARRAY_NAME[2]} 

Natisni Bash Array

Za tiskanje vseh elementov matrike Bash z vsemi indeksi in podrobnostmi lahko uporabimo ključno besedo 'declare' z možnostjo '-p'. Sintakso za tiskanje matrike Bash lahko definiramo kot:

 declare -p ARRAY_NAME 

Operacije z nizi

Ko je matrika dodeljena, lahko na njej izvedemo nekaj uporabnih operacij. Lahko prikažemo njegove ključe in vrednosti ter jih spremenimo z dodajanjem ali odstranjevanjem elementov:

Referenčni elementi

Za referenco posameznega elementa moramo poznati indeksno številko elementa. Na poljuben element se lahko sklicujemo ali ga natisnemo z naslednjo sintakso:

 ${ARRAY_NAME[index]} 

Opomba:Zavit oklepaj ${} je potreben, da se izognemo operatorjem za razširitev imena datoteke lupine.

Na primer, natisnimo element matrike z indeksom 2:

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]} 

Izhod

 Javatpoint 

Če namesto podanega indeksa uporabimo @ ali *, se razširi na vse člane matrike. Za tiskanje vseh elementov lahko uporabimo naslednji obrazec:

Bash skript

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

Izhod

 Welcome to Javatpoint 

Edina razlika med uporabo @ in * je, da je obrazec med uporabo @ obdan z dvojnimi narekovaji. V prvem primeru (med uporabo @) razširitev zagotovi rezultat v besedi za vsak element matrike. To je mogoče bolje opisati s pomočjo 'zanke'. Predpostavimo, da imamo niz s tremi elementi, 'Dobrodošli', 'Za' in 'Javatpoint':

 $ example_array= (Welcome to Javatpoint) 

Uporaba zanke z @:

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

Ustvaril bo naslednji rezultat:

 Welcome To Javatpoint 

Če uporabite zanko z *, bo ustvarjen en sam rezultat, ki bo vse elemente matrike vseboval kot eno besedo:

 Welcome To Javatpoint 

Pomembno je razumeti uporabo @ in *, ker je uporabno pri uporabi obrazca za ponavljanje elementov matrike.

Tiskanje ključev matrike

Prav tako lahko pridobimo in natisnemo ključe, uporabljene v indeksiranih ali asociativnih nizih, namesto njihovih ustreznih vrednosti. Izvede se lahko z dodajanjem ! pred imenom matrike kot spodaj:

okno.odpri javascript
 ${!ARRAY_NAME[index]} 

Primer

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

Izhod

 0 1 2 

Iskanje dolžine polja

Število elementov v matriki lahko preštejemo z naslednjim obrazcem:

 ${#ARRAY_NAME[@]} 

Primer

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

Izhod

 The array contains 3 elements 

Skozi matriko

Splošna metoda za ponavljanje vsakega elementa v matriki je uporaba zanke for.

Primer

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

Izhod

Bash Array

Druga pogosta metoda za zanko skozi matriko je pridobitev dolžine matrike in uporaba zanke v slogu C:

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};>

Primer

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

Izhod

 Java Python PHP HTML JavaScript 

Druga metoda za dodajanje novega elementa v matriko je uporaba operatorja +=. Pri tej metodi ni treba podati indeksa. V matriko lahko dodamo enega ali več elementov na naslednji način:

Primer

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

Izhod

 Java Python PHP JavaScript CSS SQL 

Posodabljanje elementa polja

Element matrike lahko posodobimo tako, da obstoječi matriki dodelimo novo vrednost z vrednostjo njenega indeksa. Spremenimo element polja na indeksu 4 z elementom 'Javatpoint'.

Primer

e r primeri modelov
 #!/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[@]} 

Izhod

 We welcome you on Javatpoint 

Brisanje elementa iz matrike

Če želimo element izbrisati iz matrike, moramo poznati njegov indeks oziroma ključ v primeru asociativne matrike. Element lahko odstranite z uporabo ' nenastavljeno ' ukaz:

 unset ARRAY_NAME[index] 

Spodaj je prikazan primer, da boste bolje razumeli ta koncept:

Primer

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

Izhod

 Java HTML CSS JavaScript 

Tukaj smo ustvarili preprosto matriko, sestavljeno iz petih elementov, 'Java', 'Python', 'HTML', 'CSS' in 'JavaScript'. Nato smo odstranili element 'Python' iz matrike z uporabo 'unset' in sklicevanjem na njegov indeks. Indeks elementa 'Python' je bil '1', saj se matrike bash začnejo z 0. Če preverimo indekse matrike po odstranitvi elementa, lahko vidimo, da manjka indeks za odstranjeni element. Indekse lahko preverimo tako, da v skript dodamo naslednji ukaz:

 echo ${!example_array[@]} 

Izhod bo videti tako:

 0 2 3 4 

Ta koncept deluje tudi za asociativne nize.

Brisanje celotne matrike

Brisanje celotne matrike je zelo preprosta naloga. Izvedete ga lahko tako, da posredujete ime matrike kot argument v ' nenastavljeno ' brez podajanja indeksa ali ključa.

Primer

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

Izhod

Bash Array

Če poskušamo natisniti vsebino zgornjega skripta, ne bo rezultatov. Vrnjen je prazen rezultat, ker matrika ne obstaja več.

Elementi niza rezin

Bash nize je mogoče razrezati tudi od danega začetnega indeksa do končnega indeksa.

Za razrez matrike od začetnega indeksa 'm' do končnega indeksa 'n' lahko uporabimo naslednjo sintakso:

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

Primer

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

Izhod

Bash Array