logo

Bash Array

Šajā tēmā mēs parādīsim bash masīva pamatus un to, kā tie tiek izmantoti bash čaulas skriptēšanā.

Masīvu var definēt kā līdzīga veida elementu kolekciju. Atšķirībā no vairuma programmēšanas valodu, bash skriptu masīviem nav jābūt līdzīgu elementu kolekcijai. Tā kā Bash nešķiro virkni no skaitļa, masīvā var būt gan virknes, gan skaitļi.

Bash nesniedz atbalstu daudzdimensiju masīviem; mums nevar būt elementi, kas paši par sevi ir masīvi. Bash nodrošina atbalstu viendimensijas skaitliski indeksētiem masīviem, kā arī asociatīvajiem masīviem. Lai piekļūtu skaitliski indeksētajam masīvam no pēdējā, mēs varam izmantot negatīvos indeksus. Indekss “-1” tiks uzskatīts par atsauci pēdējam elementam. Masīvā varam izmantot vairākus elementus.

Baša masīva deklarācija

Masīvus programmā Bash var deklarēt šādos veidos:

Skaitliski indeksētu masīvu izveide

Mēs varam izmantot jebkuru mainīgo kā indeksētu masīvu, to nedeklarējot.

Lai nepārprotami deklarētu mainīgo kā Bash masīvu, izmantojiet atslēgvārdu “declare”, un sintaksi var definēt šādi:

 declare -a ARRAY_NAME 

kur,

ARRAY_NAME norāda nosaukumu, ko mēs piešķiram masīvam.

Piezīme:Mainīgā nosaukšanas noteikumi programmā Bash ir tādi paši kā masīva nosaukšanai.

Vispārīgu metodi indeksēta masīva izveidei var definēt šādā formā:

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

kur atslēgvārds 'indekss' tiek izmantots, lai definētu pozitīvus veselus skaitļus.

Asociatīvo masīvu izveide

Atšķirībā no skaitliski indeksētiem masīviem, vispirms tiek deklarēti asociatīvie masīvi. Lai deklarētu asociatīvos masīvus, mēs varam izmantot atslēgvārdu “declare” un opciju -A (lielie burti). Sintakse var definēt šādi:

 declare -A ARRAY_NAME 

Vispārīgu metodi asociatīvā masīva izveidei var definēt šādā formā:

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

kur indekss_ tiek izmantots jebkuras virknes definēšanai.

Iepriekš minēto formu varam uzrakstīt arī šādi:

matricas programma c valodā
 declare -A ARRAY_NAME ARRAY_NAME=( [index_foo]=value_foo [index_bar]=value_bar [index_xyz]=value_xyz ) 

Bash masīva inicializācija

Lai inicializētu Bash masīvu, mēs varam izmantot piešķiršanas operatoru (=), iekavās norādot elementu sarakstu, atdalot tos ar atstarpēm, kā norādīts tālāk:

 ARRAY_NAME=(element_1st element_2nd element_Nth) 

Piezīme:Šeit pirmajam elementam būs indekss 0. Turklāt ap piešķiršanas operatoru (=) nedrīkst būt atstarpes.

Piekļūstiet Bash Array elementiem

Lai piekļūtu Bash masīva elementiem, mēs varam izmantot šādu sintaksi:

 echo ${ARRAY_NAME[2]} 

Drukāt Bash Array

Mēs varam izmantot atslēgvārdu 'declare' ar opciju '-p', lai izdrukātu visus Bash masīva elementus ar visiem indeksiem un detaļām. Bash masīva drukāšanas sintaksi var definēt kā:

 declare -p ARRAY_NAME 

Masīva operācijas

Kad masīvs ir piešķirts, mēs ar to varam veikt dažas noderīgas darbības. Mēs varam parādīt tās atslēgas un vērtības, kā arī modificēt, pievienojot vai noņemot elementus:

java prioritātes rinda

Atsauces elementi

Lai atsauktos uz vienu elementu, mums ir jāzina elementa indeksa numurs. Mēs varam atsaukties uz jebkuru elementu vai izdrukāt to, izmantojot šādu sintaksi:

 ${ARRAY_NAME[index]} 

Piezīme:Lai izvairītos no čaulas faila nosaukuma paplašināšanas operatoriem, ir nepieciešamas krokainas iekavas ${}.

Piemēram, izdrukāsim masīva elementu ar indeksu 2:

Bash skripts

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

Izvade

 Javatpoint 

Ja norādītā indeksa vietā izmantosim @ vai *, tas tiks paplašināts līdz visiem masīva dalībniekiem. Lai izdrukātu visus elementus, mēs varam izmantot šādu veidlapu:

Bash skripts

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

Izvade

 Welcome to Javatpoint 

Vienīgā atšķirība starp @ un * lietošanu ir tā, ka, lietojot @, veidlapa ir ieskauta ar pēdiņām. Pirmajā gadījumā (izmantojot @) izvēršana nodrošina rezultātu ar vārdu katram masīva elementam. To var labāk aprakstīt ar 'for loop' palīdzību. Pieņemsim, ka mums ir masīvs ar trim elementiem: 'Laipni lūdzam', 'Kam' un 'Javatpoint':

 $ example_array= (Welcome to Javatpoint) 

Cilpas pielietošana ar @:

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

Tas radīs šādu rezultātu:

 Welcome To Javatpoint 

Lietojot cilpu ar *, tiks izveidots viens rezultāts, kas satur visus masīva elementus kā vienu vārdu:

 Welcome To Javatpoint 

Ir svarīgi saprast @ un * lietojumu, jo tas ir noderīgi, izmantojot formu, lai atkārtotu masīva elementus.

Masīva atslēgu drukāšana

Mēs varam arī izgūt un izdrukāt indeksētos vai asociatīvajos masīvos izmantotās atslēgas to attiecīgo vērtību vietā. To var veikt, pievienojot ! operatoru pirms masīva nosaukuma, kā norādīts tālāk:

reactjs karte
 ${!ARRAY_NAME[index]} 

Piemērs

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

Izvade

 0 1 2 

Masīva garuma atrašana

Mēs varam saskaitīt masīvā ietverto elementu skaitu, izmantojot šādu formu:

 ${#ARRAY_NAME[@]} 

Piemērs

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

Izvade

 The array contains 3 elements 

Apmeklējiet masīvu

Vispārīgā metode, kā atkārtot katru masīva vienumu, ir izmantot cilpu.

Piemērs

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

Izvade

Bash Array

Vēl viena izplatīta masīva cilpas metode ir masīva garuma izgūšana un C stila cilpas izmantošana:

Bash skripts

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

Piemērs

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

Izvade

 Java Python PHP HTML JavaScript 

Vēl viena metode jauna elementa pievienošanai masīvam ir operatora += izmantošana. Šajā metodē indekss nav jānorāda. Mēs varam pievienot vienu vai vairākus elementus masīvam, izmantojot šādu veidu:

Piemērs

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

Izvade

 Java Python PHP JavaScript CSS SQL 

Masīva elementa atjaunināšana

Mēs varam atjaunināt masīva elementu, piešķirot esošajam masīvam jaunu vērtību pēc tā indeksa vērtības. Mainīsim masīva elementu indeksā 4 ar elementu 'Javatpoint'.

Piemērs

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

Izvade

 We welcome you on Javatpoint 

Elementa dzēšana no masīva

Ja mēs vēlamies dzēst elementu no masīva, mums ir jāzina tā indekss vai atslēga asociatīvā masīva gadījumā. Elementu var noņemt, izmantojot atiestatīts ' komanda:

 unset ARRAY_NAME[index] 

Tālāk ir parādīts piemērs, lai sniegtu jums labāku izpratni par šo jēdzienu.

Piemērs

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

Izvade

java math.random
 Java HTML CSS JavaScript 

Šeit mēs esam izveidojuši vienkāršu masīvu, kas sastāv no pieciem elementiem: 'Java', 'Python', 'HTML', 'CSS' un 'JavaScript'. Pēc tam mēs noņēmām elementu 'Python' no masīva, izmantojot 'unset' un atsaucoties uz tā indeksu. Elementa 'Python' indekss bija '1', jo bash masīvi sākas no 0. Pārbaudot masīva indeksus pēc elementa noņemšanas, mēs varam redzēt, ka trūkst noņemtā elementa indeksa. Mēs varam pārbaudīt indeksus, pievienojot skriptam šādu komandu:

 echo ${!example_array[@]} 

Izvade izskatīsies šādi:

 0 2 3 4 

Šī koncepcija darbojas arī asociatīvajiem masīviem.

Visa masīva dzēšana

Visa masīva dzēšana ir ļoti vienkāršs uzdevums. To var veikt, nododot masīva nosaukumu kā argumentu ' atiestatīts ' komandu, nenorādot indeksu vai atslēgu.

Piemērs

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

Izvade

Bash Array

Ja mēģināsim izdrukāt iepriekš minētā skripta saturu, izvade nebūs. Tiek atgriezts tukšs rezultāts, jo masīvs vairs nepastāv.

Šķēles masīva elementi

Bash masīvus var arī sadalīt no dotā sākuma indeksa uz beigu indeksu.

Lai sadalītu masīvu no sākuma indeksa “m” uz beigu indeksu “n”, mēs varam izmantot šādu sintaksi:

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

Piemērs

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

Izvade

Bash Array