Š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
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=( '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};>
Piemērs
#!/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[@]}'
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=( 'Java''Python''PHP' ) #Adding new elements example_array+=( JavaScript CSS SQL ) #Printing all the elements echo '${example_array[@]}'
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=( 'We''welcome''you''on''SSSIT' ) #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=( 'Java''Python''HTML''CSS''JavaScript' ) #Removing the element unset example_array[1] #Printing all the elements after deletion echo '${example_array[@]}'
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=( 'Java''Python''HTML''CSS''JavaScript' ) #Deleting Entire Array unset example_array #Printing the Array Elements echo ${!example_array[@]} #Printing the keys echo ${!example_array[@]}
Izvade
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}')
Piemērs
#!/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
Izvade
${length};>