U ovoj ćemo temi demonstrirati osnove bash polja i kako se koriste u skriptiranju bash ljuske.
Niz se može definirati kao skup elemenata slične vrste. Za razliku od većine programskih jezika, nizovi u bash skriptiranju ne moraju biti skup sličnih elemenata. Budući da Bash ne razlikuje niz od broja, niz može sadržavati i nizove i brojeve.
Bash ne pruža podršku za višedimenzionalne nizove; ne možemo imati elemente koji su sami po sebi nizovi. Bash pruža podršku za jednodimenzionalne numerički indeksirane nizove, kao i za asocijativne nizove. Za pristup numerički indeksiranom nizu od zadnjeg, možemo koristiti negativne indekse. Indeks '-1' smatrat će se referencom za posljednji element. Možemo koristiti nekoliko elemenata u nizu.
Bash deklaracija polja
Nizovi u Bashu mogu se deklarirati na sljedeće načine:
Stvaranje numerički indeksiranih nizova
Možemo koristiti bilo koju varijablu kao indeksirano polje bez deklariranja.
Da biste eksplicitno deklarirali varijablu kao Bash polje, upotrijebite ključnu riječ 'declare', a sintaksa se može definirati kao:
declare -a ARRAY_NAME
gdje,
ARRAY_NAME označava naziv koji bismo dodijelili nizu.
Bilješka:Pravila imenovanja varijable u Bashu ista su za imenovanje niza.
Opća metoda za stvaranje indeksiranog niza može se definirati u sljedećem obliku:
ARRAY_NAME[index_1]=value_1 ARRAY_NAME[index_2]=value_2 ARRAY_NAME[index_n]=value_n
gdje se ključna riječ 'index' koristi za definiranje pozitivnih cijelih brojeva.
Stvaranje asocijativnih nizova
Za razliku od numerički indeksiranih nizova, asocijativni nizovi se prvo deklariraju. Možemo koristiti ključnu riječ 'declare' i opciju -A (velika slova) za deklariranje asocijativnih nizova. Sintaksa se može definirati kao:
declare -A ARRAY_NAME
Opća metoda za stvaranje asocijativnog niza može se definirati u sljedećem obliku:
declare -A ARRAY_NAME ARRAY_NAME[index_foo]=value_foo ARRAY_NAME[index_bar]=value_bar ARRAY_NAME[index_xyz]=value_xyz
gdje se index_ koristi za definiranje bilo kojeg niza.
Gornji obrazac možemo napisati i na sljedeći način:
java char u cijeli broj
declare -A ARRAY_NAME ARRAY_NAME=( [index_foo]=value_foo [index_bar]=value_bar [index_xyz]=value_xyz )
Inicijalizacija Bash polja
Da bismo inicijalizirali Bash niz, možemo upotrijebiti operator dodjele (=), određivanjem popisa elemenata unutar zagrada, odvojenih razmacima kao što je dolje:
ARRAY_NAME=(element_1st element_2nd element_Nth)
Bilješka:Ovdje će prvi element imati indeks 0. Također, ne bi trebalo biti razmaka oko operatora dodjele (=).
Pristupite elementima Bash polja
Za pristup elementima Bash polja, možemo koristiti sljedeću sintaksu:
echo ${ARRAY_NAME[2]}
Ispis Bash polja
Možemo koristiti ključnu riječ 'declare' s opcijom '-p' za ispis svih elemenata Bash polja sa svim indeksima i detaljima. Sintaksa za ispis Bash polja može se definirati kao:
declare -p ARRAY_NAME
Operacije nizova
Nakon što je niz dodijeljen, možemo izvesti neke korisne operacije na njemu. Možemo prikazati njegove ključeve i vrijednosti, kao i modificirati ih dodavanjem ili uklanjanjem elemenata:
Referentni elementi
Da bismo referencirali jedan element, moramo znati indeksni broj elementa. Možemo referencirati ili ispisati bilo koji element koristeći sljedeću sintaksu:
${ARRAY_NAME[index]}
Bilješka:Vitičaste zagrade ${} potrebne su kako bi se izbjegli operatori za proširenje naziva datoteke ljuske.
Na primjer, ispišite element niza s indeksom 2:
Bash skripta
#!/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]}
Izlaz
dobiti vezu
Javatpoint
Ako koristimo @ ili * umjesto određenog indeksa, on će se proširiti na sve članove niza. Za ispis svih elemenata možemo koristiti sljedeći obrazac:
Bash skripta
#!/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[@]}'
Izlaz
Welcome to Javatpoint
Jedina razlika između korištenja @ i * je ta što je obrazac okružen dvostrukim navodnicima kada se koristi @. U prvom slučaju (dok koristite @), proširenje daje rezultat u riječi za svaki element niza. Može se bolje opisati uz pomoć 'for petlje'. Pretpostavimo da imamo niz s tri elementa, 'Dobrodošli', 'Prima' i 'Javatpoint':
$ example_array= (Welcome to Javatpoint)
Primjena petlje sa @:
for i in '${example_array[@]}'; do echo '$i'; done
To će proizvesti sljedeći rezultat:
Welcome To Javatpoint
Primjenom petlje s *, proizvest će se jedan rezultat koji će sadržavati sve elemente niza kao jednu riječ:
Welcome To Javatpoint
Važno je razumjeti upotrebu znakova @ i * jer je korisno dok koristite obrazac za ponavljanje kroz elemente niza.
Ispis ključeva niza
Također možemo dohvatiti i ispisati ključeve koji se koriste u indeksiranim ili asocijativnim nizovima, umjesto njihovih odgovarajućih vrijednosti. Može se izvesti dodavanjem ! operator ispred naziva niza kao što je prikazano u nastavku:
slučajni broj gen java
${!ARRAY_NAME[index]}
Primjer
#!/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[@]}'
Izlaz
0 1 2
Pronalaženje duljine niza
Broj elemenata sadržanih u nizu možemo izbrojati korištenjem sljedećeg obrasca:
${#ARRAY_NAME[@]}
Primjer
#!/bin/bash #Declaring the Array declare -a example_array=( 'Welcome''To''Javatpoint' ) #Printing Array Length echo 'The array contains ${#example_array[@]} elements'
Izlaz
The array contains 3 elements
Prođite kroz niz
Opća metoda za ponavljanje svake stavke u nizu je korištenje 'for petlje'.
Primjer
#!/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
Izlaz
Druga uobičajena metoda za prolazak kroz niz je dohvaćanje duljine niza i korištenje petlje u stilu C:
Bash skripta
#!/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};>
Primjer
#!/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[@]}'
Izlaz
Java Python PHP HTML JavaScript
Druga metoda za dodavanje novog elementa u niz je korištenje operatora +=. U ovoj metodi nema potrebe za navođenjem indeksa. Možemo dodati jedan ili više elemenata u niz na sljedeći način:
Primjer
#!/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[@]}'
Izlaz
Java Python PHP JavaScript CSS SQL
Ažuriranje elementa polja
Element niza možemo ažurirati dodjeljivanjem nove vrijednosti postojećem nizu pomoću njegove vrijednosti indeksa. Promijenimo element niza na indeksu 4 elementom 'Javatpoint'.
Primjer
#!/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[@]}
Izlaz
We welcome you on Javatpoint
Brisanje elementa iz niza
Ako želimo izbrisati element iz niza, moramo znati njegov indeks ili ključ u slučaju asocijativnog niza. Element se može ukloniti pomoću ' nepostavljeno ' naredba:
unset ARRAY_NAME[index]
Dolje je prikazan primjer kako biste bolje razumjeli ovaj koncept:
Primjer
#!/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[@]}'
Izlaz
Java HTML CSS JavaScript
Ovdje smo stvorili jednostavan niz koji se sastoji od pet elemenata, 'Java', 'Python', 'HTML', 'CSS' i 'JavaScript'. Zatim smo uklonili element 'Python' iz niza korištenjem 'unset' i pozivanjem na njegov indeks. Indeks elementa 'Python' bio je '1', budući da bash nizovi počinju od 0. Ako provjerimo indekse niza nakon uklanjanja elementa, možemo vidjeti da nedostaje indeks za uklonjeni element. Indekse možemo provjeriti dodavanjem sljedeće naredbe u skriptu:
echo ${!example_array[@]}
Izlaz će izgledati ovako:
java else if
0 2 3 4
Ovaj koncept također funkcionira za asocijativne nizove.
Brisanje cijelog niza
Brisanje cijelog niza vrlo je jednostavan zadatak. Može se izvesti prosljeđivanjem naziva niza kao argumenta u ' nepostavljeno ' naredba bez navođenja indeksa ili ključa.
Primjer
#!/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[@]}
Izlaz
Neće biti rezultata ako pokušamo ispisati sadržaj gornje skripte. Vraća se prazan rezultat jer niz više ne postoji.
Slice Array Elements
Bash nizovi također se mogu rezati od zadanog početnog indeksa do završnog indeksa.
Za rezanje niza od početnog indeksa 'm' do završnog indeksa 'n', možemo koristiti sljedeću sintaksu:
SLICED_ARRAY=(${ARRAY_NAME[@]:m:n}')
Primjer
#!/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
Izlaz
${length};>