I dette emnet vil vi demonstrere det grunnleggende om bash array og hvordan de brukes i bash shell scripting.
En matrise kan defineres som en samling av lignende typer elementer. I motsetning til de fleste programmeringsspråk, trenger ikke arrays i bash-skripting være samlingen av lignende elementer. Siden Bash ikke skiller strengen fra et tall, kan en matrise inneholde både strenger og tall.
Bash gir ikke støtte for de flerdimensjonale arrayene; vi kan ikke ha elementene som er arrays i seg selv. Bash gir støtte for endimensjonale numerisk indekserte arrays så vel som assosiative arrays. For å få tilgang til den numerisk indekserte matrisen fra sist, kan vi bruke negative indekser. Indeksen '-1' vil bli betraktet som en referanse for det siste elementet. Vi kan bruke flere elementer i en matrise.
Bash Array-erklæring
Matriser i Bash kan deklareres på følgende måter:
Opprette numerisk indekserte matriser
Vi kan bruke hvilken som helst variabel som en indeksert matrise uten å deklarere den.
For å eksplisitt erklære en variabel som en Bash Array, bruk nøkkelordet 'declare' og syntaksen kan defineres som:
declare -a ARRAY_NAME
hvor,
ARRAY_NAME angir navnet vi vil tilordne til arrayen.
Merk:Reglene for å navngi en variabel i Bash er de samme for å navngi en matrise.
En generell metode for å lage en indeksert matrise kan defineres i følgende form:
ARRAY_NAME[index_1]=value_1 ARRAY_NAME[index_2]=value_2 ARRAY_NAME[index_n]=value_n
hvor nøkkelordet 'indeks' brukes til å definere positive heltall.
Opprette assosiative matriser
I motsetning til numerisk indekserte matriser, er de assosiative matrisene først erklært. Vi kan bruke nøkkelordet 'declare' og alternativet -A (store bokstaver) for å deklarere de assosiative matrisene. Syntaksen kan defineres som:
declare -A ARRAY_NAME
En generell metode for å lage en assosiativ matrise kan defineres i følgende form:
declare -A ARRAY_NAME ARRAY_NAME[index_foo]=value_foo ARRAY_NAME[index_bar]=value_bar ARRAY_NAME[index_xyz]=value_xyz
hvor index_ brukes til å definere en hvilken som helst streng.
Vi kan også skrive skjemaet ovenfor på følgende måte:
java bryter ut av loopen
declare -A ARRAY_NAME ARRAY_NAME=( [index_foo]=value_foo [index_bar]=value_bar [index_xyz]=value_xyz )
Bash Array-initialisering
For å initialisere en Bash Array, kan vi bruke tilordningsoperator (=), ved å spesifisere listen over elementene i parentes, atskilt med mellomrom som nedenfor:
ARRAY_NAME=(element_1st element_2nd element_Nth)
Merk:Her vil det første elementet ha en indeks 0. Det skal heller ikke være mellomrom rundt tildelingsoperatøren (=).
Få tilgang til Elements of Bash Array
For å få tilgang til elementene i en Bash Array, kan vi bruke følgende syntaks:
deterministiske endelige automater
echo ${ARRAY_NAME[2]}
Skriv ut Bash Array
Vi kan bruke nøkkelordet 'declare' med et '-p'-alternativ for å skrive ut alle elementene i en Bash Array med alle indeksene og detaljene. Syntaksen for å skrive ut Bash Array kan defineres som:
declare -p ARRAY_NAME
Matriseoperasjoner
Når en matrise er tildelt, kan vi utføre noen nyttige operasjoner på den. Vi kan vise nøklene og verdiene samt endre dem ved å legge til eller fjerne elementene:
Referanseelementer
For å referere til et enkelt element, må vi vite indeksnummeret til elementet. Vi kan referere til eller skrive ut et hvilket som helst element ved å bruke følgende syntaks:
${ARRAY_NAME[index]}
Merk:Krøllete klammeparenteser ${} kreves for å unngå shells filnavnutvidelsesoperatører.
La oss for eksempel skrive ut et element i en matrise med en indeks på 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]}
Produksjon
Javatpoint
Hvis vi bruker @ eller * i stedet for en spesifisert indeks, vil den utvides til alle medlemmer av matrisen. For å skrive ut alle elementene kan vi bruke følgende skjema:
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[@]}'
Produksjon
Welcome to Javatpoint
Den eneste forskjellen mellom å bruke @ og * er at skjemaet er omgitt av doble anførselstegn mens du bruker @. I det første tilfellet (mens du bruker @), gir utvidelsen et resultat i et ord for hvert element i matrisen. Det kan beskrives bedre ved hjelp av 'for loop'. Anta at vi har en matrise med tre elementer, 'Velkommen', 'Til' og 'Javatpoint':
$ example_array= (Welcome to Javatpoint)
Bruke en løkke med @:
for i in '${example_array[@]}'; do echo '$i'; done
Det vil gi følgende resultat:
Welcome To Javatpoint
Ved å bruke en løkke med *, vil et enkelt resultat bli produsert som inneholder alle elementene i arrayet som et enkelt ord:
Welcome To Javatpoint
Det er viktig å forstå bruken av @ og * fordi det er nyttig når du bruker skjemaet til å iterere gjennom array-elementer.
Skrive ut nøklene til en matrise
Vi kan også hente og skrive ut nøklene som brukes i indekserte eller assosiative arrays, i stedet for deres respektive verdier. Det kan utføres ved å legge til ! operator før matrisenavnet som nedenfor:
pandas loc
${!ARRAY_NAME[index]}
Eksempel
#!/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[@]}'
Produksjon
0 1 2
Finne matriselengde
Vi kan telle antall elementer i matrisen ved å bruke følgende skjema:
${#ARRAY_NAME[@]}
Eksempel
#!/bin/bash #Declaring the Array declare -a example_array=( 'Welcome''To''Javatpoint' ) #Printing Array Length echo 'The array contains ${#example_array[@]} elements'
Produksjon
The array contains 3 elements
Sløyfe gjennom Array
Den generelle metoden for å iterere over hvert element i en matrise er å bruke 'for loop'.
Eksempel
#!/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
Produksjon
En annen vanlig metode for å gå gjennom en matrise er å hente lengden på matrisen og bruke C-stilsløyfen:
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};>
Eksempel
#!/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[@]}'
Produksjon
Java Python PHP HTML JavaScript
En annen metode for å legge til et nytt element i en matrise er å bruke +=-operatoren. Det er ikke nødvendig å spesifisere indeksen i denne metoden. Vi kan legge til ett eller flere elementer i matrisen ved å bruke følgende måte:
Eksempel
#!/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[@]}'
Produksjon
Java Python PHP JavaScript CSS SQL
Oppdaterer Array Element
Vi kan oppdatere array-elementet ved å tilordne en ny verdi til den eksisterende arrayen etter indeksverdien. La oss endre array-elementet ved indeks 4 med et element 'Javatpoint'.
Eksempel
#!/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[@]}
Produksjon
We welcome you on Javatpoint
Slette et element fra en matrise
Hvis vi ønsker å slette elementet fra matrisen, må vi kjenne indeksen eller nøkkelen i tilfelle en assosiativ matrise. Et element kan fjernes ved å bruke ' deaktivert ' kommando:
unset ARRAY_NAME[index]
Et eksempel er vist nedenfor for å gi deg en bedre forståelse av dette konseptet:
Eksempel
#!/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[@]}'
Produksjon
Java HTML CSS JavaScript
Her har vi laget en enkel array som består av fem elementer, 'Java', 'Python', 'HTML', 'CSS' og 'JavaScript'. Deretter fjernet vi elementet 'Python' fra arrayet ved å bruke 'unset' og referere til indeksen til det. Indeksen til elementet 'Python' var '1', siden bash-arrays starter fra 0. Hvis vi sjekker indeksene til arrayet etter å ha fjernet elementet, kan vi se at indeksen for det fjernede elementet mangler. Vi kan sjekke indeksene ved å legge til følgende kommando i skriptet:
echo ${!example_array[@]}
Utgangen vil se slik ut:
0 2 3 4
Dette konseptet fungerer også for assosiative arrays.
Sletting av hele matrisen
Å slette en hel matrise er en veldig enkel oppgave. Det kan utføres ved å sende arraynavnet som et argument til ' deaktivert ' kommando uten å spesifisere indeksen eller nøkkelen.
Eksempel
#!/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[@]}
Produksjon
Det blir ingen utgang hvis vi prøver å skrive ut innholdet i skriptet ovenfor. Et tomt resultat returneres fordi matrisen ikke eksisterer lenger.
annet hvis java
Slice Array Elements
Bash-arrayer kan også deles fra en gitt startindeks til sluttindeksen.
For å dele en matrise fra startindeks 'm' til en sluttindeks 'n', kan vi bruke følgende syntaks:
SLICED_ARRAY=(${ARRAY_NAME[@]:m:n}')
Eksempel
#!/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
Produksjon
${length};>