I dette emne vil vi demonstrere det grundlæggende i bash array, og hvordan de bruges i bash shell scripting.
Et array kan defineres som en samling af lignende typer elementer. I modsætning til de fleste programmeringssprog behøver arrays i bash-scripting ikke at være en samling af lignende elementer. Da Bash ikke skelner strengen fra et tal, kan en matrix indeholde både strenge og tal.
Bash giver ikke support til de multidimensionelle arrays; vi kan ikke have de elementer, som er arrays i sig selv. Bash understøtter endimensionelle numerisk indekserede arrays såvel som associative arrays. For at få adgang til det numerisk indekserede array fra sidst, kan vi bruge negative indekser. Indekset '-1' vil blive betragtet som en reference for det sidste element. Vi kan bruge flere elementer i et array.
Bash Array-erklæring
Arrays i Bash kan erklæres på følgende måder:
Oprettelse af numerisk indekserede arrays
Vi kan bruge enhver variabel som et indekseret array uden at erklære det.
For eksplicit at erklære en variabel som en Bash Array, brug nøgleordet 'declare' og syntaksen kan defineres som:
declare -a ARRAY_NAME
hvor,
ARRAY_NAME angiver det navn, som vi vil tildele arrayet.
Bemærk:Reglerne for at navngive en variabel i Bash er de samme for at navngive en matrix.
En generel metode til at oprette et indekseret array 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 søgeordet 'indeks' bruges til at definere positive heltal.
Oprettelse af associative arrays
I modsætning til numerisk indekserede arrays er de associative arrays først erklæret. Vi kan bruge nøgleordet 'declare' og muligheden -A (store bogstaver) til at erklære de associative arrays. Syntaksen kan defineres som:
declare -A ARRAY_NAME
En generel metode til at skabe et associativt array 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_ bruges til at definere enhver streng.
Vi kan også skrive ovenstående formular på følgende måde:
java bryde ud af loop
declare -A ARRAY_NAME ARRAY_NAME=( [index_foo]=value_foo [index_bar]=value_bar [index_xyz]=value_xyz )
Bash Array Initialisering
For at initialisere en Bash Array kan vi bruge tildelingsoperator (=) ved at angive listen over elementerne inden for parentes, adskilt af mellemrum som nedenfor:
ARRAY_NAME=(element_1st element_2nd element_Nth)
Bemærk:Her vil det første element have et indeks 0. Der bør heller ikke være mellemrum omkring tildelingsoperatoren (=).
Få adgang til elementer i Bash Array
For at få adgang til elementerne i en Bash Array kan vi bruge følgende syntaks:
10 ml til ounces
echo ${ARRAY_NAME[2]}
Udskriv Bash Array
Vi kan bruge søgeordet 'declare' med en '-p' mulighed for at udskrive alle elementerne i en Bash Array med alle indekser og detaljer. Syntaksen til at udskrive Bash Array kan defineres som:
declare -p ARRAY_NAME
Array operationer
Når et array er tildelt, kan vi udføre nogle nyttige operationer på det. Vi kan vise dens nøgler og værdier samt ændre dem ved at tilføje eller fjerne elementerne:
Referenceelementer
For at referere til et enkelt element skal vi kende elementets indeksnummer. Vi kan referere eller udskrive ethvert element ved hjælp af følgende syntaks:
${ARRAY_NAME[index]}
Bemærk:Krøllede klammeparenteser ${} er nødvendige for at undgå shells filnavnsudvidelsesoperatorer.
Lad os for eksempel udskrive et element i en matrix med et 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]}
Produktion
Javatpoint
Hvis vi bruger @ eller * i stedet for et specificeret indeks, udvides det til alle medlemmer af arrayet. For at udskrive alle elementerne kan vi bruge følgende formular:
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[@]}'
Produktion
Welcome to Javatpoint
Den eneste forskel mellem at bruge @ og * er, at formularen er omgivet af dobbelte anførselstegn, mens du bruger @. I det første tilfælde (mens du bruger @), giver udvidelsen et resultat i et ord for hvert element i arrayet. Det kan bedre beskrives ved hjælp af 'for loop'. Antag, at vi har et array med tre elementer, 'Velkommen', 'Til' og 'Javatpoint':
$ example_array= (Welcome to Javatpoint)
Anvendelse af en løkke med @:
for i in '${example_array[@]}'; do echo '$i'; done
Det vil give følgende resultat:
Welcome To Javatpoint
Ved at anvende en løkke med *, vil der blive produceret et enkelt resultat, der indeholder alle elementerne i arrayet som et enkelt ord:
Welcome To Javatpoint
Det er vigtigt at forstå brugen af @ og *, fordi det er nyttigt, mens du bruger formularen til at gentage array-elementer.
Udskrivning af nøglerne til et array
Vi kan også hente og udskrive de nøgler, der bruges i indekserede eller associative arrays, i stedet for deres respektive værdier. Det kan udføres ved at tilføje ! operator før matrixnavnet 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[@]}'
Produktion
0 1 2
Find arraylængde
Vi kan tælle antallet af elementer indeholdt i arrayet ved at bruge følgende formular:
${#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'
Produktion
The array contains 3 elements
Sløjfe gennem Arrayet
Den generelle metode til at iterere over hvert element i et array er ved at bruge '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
Produktion
En anden almindelig metode til at sløjfe gennem et array er at hente længden af arrayet og bruge C-style loop:
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[@]}'
Produktion
Java Python PHP HTML JavaScript
En anden metode til at tilføje et nyt element til et array er ved at bruge += operatoren. Det er ikke nødvendigt at angive indekset i denne metode. Vi kan tilføje et eller flere elementer i arrayet ved at bruge følgende måde:
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[@]}'
Produktion
Java Python PHP JavaScript CSS SQL
Opdatering af Array Element
Vi kan opdatere array-elementet ved at tildele en ny værdi til det eksisterende array ved dets indeksværdi. Lad os ændre 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[@]}
Produktion
We welcome you on Javatpoint
Sletning af et element fra et array
Hvis vi ønsker at slette elementet fra arrayet, skal vi kende dets indeks eller nøgle i tilfælde af en associativ array. Et element kan fjernes ved at bruge ' deaktiveret ' kommando:
unset ARRAY_NAME[index]
Et eksempel er vist nedenfor for at give dig en bedre forståelse af dette koncept:
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[@]}'
Produktion
Java HTML CSS JavaScript
Her har vi lavet et simpelt array bestående af fem elementer, 'Java', 'Python', 'HTML', 'CSS' og 'JavaScript'. Derefter fjernede vi elementet 'Python' fra arrayet ved at bruge 'unset' og referere til indekset for det. Indekset for elementet 'Python' var '1', da bash-arrays starter fra 0. Hvis vi tjekker indeksene for arrayet efter at have fjernet elementet, kan vi se, at indekset for det fjernede element mangler. Vi kan kontrollere indekserne ved at tilføje følgende kommando i scriptet:
echo ${!example_array[@]}
Outputtet vil se sådan ud:
0 2 3 4
Dette koncept fungerer også for de associative arrays.
Sletning af hele arrayet
Sletning af et helt array er en meget enkel opgave. Det kan udføres ved at sende array-navnet som et argument til ' deaktiveret ' kommando uden at angive indekset eller nøglen.
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[@]}
Produktion
Der vil ikke være noget output, hvis vi forsøger at udskrive indholdet af ovenstående script. Et tomt resultat returneres, fordi arrayet ikke eksisterer længere.
java hvis andet
Slice Array Elements
Bash-arrays kan også opdeles fra et givet startindeks til slutindekset.
For at opdele et array fra startindeks 'm' til et slutindeks 'n' kan vi bruge 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
Produktion
${length};>