logo

Bash Array

V tejto téme si ukážeme základy bash poľa a ako sa používajú pri skriptovaní bash shell.

Pole možno definovať ako kolekciu prvkov podobného typu. Na rozdiel od väčšiny programovacích jazykov, polia v bash skriptovaní nemusia byť zbierkou podobných prvkov. Keďže Bash nerozlišuje reťazec od čísla, pole môže obsahovať reťazce aj čísla.

Bash neposkytuje podporu pre viacrozmerné polia; nemôžeme mať v sebe prvky, ktoré sú poliami. Bash poskytuje podporu pre jednorozmerné numericky indexované polia, ako aj asociatívne polia. Na prístup k numericky indexovanému poli z posledného môžeme použiť záporné indexy. Index '-1' sa bude považovať za referenciu pre posledný prvok. V poli môžeme použiť niekoľko prvkov.

Vyhlásenie Bash Array

Polia v Bash možno deklarovať nasledujúcimi spôsobmi:

Vytváranie číselne indexovaných polí

Ako indexované pole môžeme použiť akúkoľvek premennú bez toho, aby sme ju deklarovali.

Ak chcete explicitne deklarovať premennú ako Bash Array, použite kľúčové slovo „declare“ a syntax môže byť definovaná ako:

 declare -a ARRAY_NAME 

kde,

ARRAY_NAME označuje názov, ktorý by sme poliu priradili.

Poznámka:Pravidlá pomenovania premennej v Bash sú rovnaké pre pomenovanie poľa.

Všeobecná metóda na vytvorenie indexovaného poľa môže byť definovaná v nasledujúcom tvare:

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

kde kľúčové slovo „index“ sa používa na definovanie kladných celých čísel.

Vytváranie asociatívnych polí

Na rozdiel od numericky indexovaných polí sú najskôr deklarované asociatívne polia. Na deklarovanie asociatívnych polí môžeme použiť kľúčové slovo 'deklarovať' a voľbu -A (veľké písmená). Syntax možno definovať ako:

 declare -A ARRAY_NAME 

Všeobecná metóda na vytvorenie asociatívneho poľa môže byť definovaná v nasledujúcom tvare:

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

kde index_ sa používa na definovanie ľubovoľného reťazca.

Vyššie uvedený formulár môžeme napísať aj nasledujúcim spôsobom:

lev v porovnaní s tigrom
 declare -A ARRAY_NAME ARRAY_NAME=( [index_foo]=value_foo [index_bar]=value_bar [index_xyz]=value_xyz ) 

Inicializácia poľa Bash

Na inicializáciu poľa Bash môžeme použiť operátor priradenia (=) zadaním zoznamu prvkov v zátvorkách oddelených medzerami, ako je uvedené nižšie:

 ARRAY_NAME=(element_1st element_2nd element_Nth) 

Poznámka:Tu bude mať prvý prvok index 0. Okolo operátora priradenia (=) by tiež nemala byť medzera.

Prístup k prvkom Bash Array

Na prístup k prvkom poľa Bash môžeme použiť nasledujúcu syntax:

hrithik rošanský vek
 echo ${ARRAY_NAME[2]} 

Tlačové pole Bash

Na vytlačenie všetkých prvkov poľa Bash so všetkými indexmi a podrobnosťami môžeme použiť kľúčové slovo 'deklarovať' s možnosťou '-p'. Syntax na tlač poľa Bash možno definovať ako:

 declare -p ARRAY_NAME 

Operácie poľa

Keď je pole priradené, môžeme s ním vykonávať niekoľko užitočných operácií. Môžeme zobraziť jeho kľúče a hodnoty, ako aj upraviť ich pridaním alebo odstránením prvkov:

Referenčné prvky

Aby sme mohli odkazovať na jeden prvok, musíme poznať indexové číslo prvku. Môžeme odkazovať alebo vytlačiť ľubovoľný prvok pomocou nasledujúcej syntaxe:

 ${ARRAY_NAME[index]} 

Poznámka:Zložené zátvorky ${} sú povinné, aby sa zabránilo operátorom rozšírenia názvu súboru.

Napríklad vytlačíme prvok poľa s indexom 2:

Bash skript

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

Výkon

 Javatpoint 

Ak namiesto zadaného indexu použijeme znak @ alebo *, rozšíri sa na všetkých členov poľa. Na tlač všetkých prvkov môžeme použiť nasledujúci formulár:

Bash skript

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

Výkon

 Welcome to Javatpoint 

Jediný rozdiel medzi použitím @ a * je ten, že pri použití @ je formulár obklopený dvojitými úvodzovkami. V prvom prípade (pri použití @) rozšírenie poskytuje výsledok v slove pre každý prvok poľa. Lepšie sa to dá opísať pomocou „slučky for“. Predpokladajme, že máme pole s tromi prvkami, „Welcome“, „To“ a „Javatpoint“:

 $ example_array= (Welcome to Javatpoint) 

Použitie slučky s @:

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

Výsledkom bude nasledujúci výsledok:

 Welcome To Javatpoint 

Použitím slučky s * sa vytvorí jediný výsledok, ktorý bude obsahovať všetky prvky poľa ako jedno slovo:

 Welcome To Javatpoint 

Je dôležité pochopiť použitie @ a *, pretože je to užitočné pri používaní formulára na iteráciu cez prvky poľa.

Tlač kľúčov poľa

Môžeme tiež načítať a vytlačiť kľúče používané v indexovaných alebo asociatívnych poliach namiesto ich príslušných hodnôt. Dá sa to vykonať pridaním ! operátor pred názvom poľa, ako je uvedené nižšie:

testovanie a typy softvéru
 ${!ARRAY_NAME[index]} 

Príklad

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

Výkon

 0 1 2 

Hľadanie dĺžky poľa

Počet prvkov obsiahnutých v poli môžeme spočítať pomocou nasledujúceho formulára:

 ${#ARRAY_NAME[@]} 

Príklad

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

Výkon

 The array contains 3 elements 

Slučka cez pole

Všeobecnou metódou na iteráciu každej položky v poli je použitie cyklu „for“.

Príklad

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

Výkon

Bash Array

Ďalšou bežnou metódou na precyklenie poľa je načítanie dĺžky poľa a použitie slučky v štýle C:

Bash skript

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

Príklad

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

Výkon

 Java Python PHP HTML JavaScript 

Ďalšou metódou na pridanie nového prvku do poľa je použitie operátora +=. Pri tejto metóde nie je potrebné špecifikovať index. Do poľa môžeme pridať jeden alebo viacero prvkov nasledujúcim spôsobom:

Príklad

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

Výkon

 Java Python PHP JavaScript CSS SQL 

Aktualizuje sa prvok poľa

Prvok poľa môžeme aktualizovať priradením novej hodnoty existujúcemu poľu podľa jeho hodnoty indexu. Zmeňme prvok poľa na indexe 4 prvkom 'Javatpoint'.

Príklad

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

Výkon

 We welcome you on Javatpoint 

Odstránenie prvku z poľa

Ak chceme prvok z poľa vymazať, musíme poznať jeho index alebo kľúč v prípade asociatívneho poľa. Prvok je možné odstrániť pomocou „ odstaviť ' príkaz:

 unset ARRAY_NAME[index] 

Nižšie je uvedený príklad, aby ste lepšie pochopili tento koncept:

Príklad

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

Výkon

 Java HTML CSS JavaScript 

Tu sme vytvorili jednoduché pole pozostávajúce z piatich prvkov, 'Java', 'Python', 'HTML', 'CSS' a 'JavaScript'. Potom sme odstránili prvok 'Python' z poľa pomocou 'unset' a odkazovaním na jeho index. Index prvku 'Python' bol '1', keďže bash polia začínajú od 0. Ak po odstránení prvku skontrolujeme indexy poľa, vidíme, že index pre odstránený prvok chýba. Indexy môžeme skontrolovať pridaním nasledujúceho príkazu do skriptu:

 echo ${!example_array[@]} 

Výstup bude vyzerať takto:

 0 2 3 4 

Tento koncept funguje aj pre asociatívne polia.

Odstránenie celého poľa

Odstránenie celého poľa je veľmi jednoduchá úloha. Dá sa to vykonať odovzdaním názvu poľa ako argumentu do ' odstaviť ' bez zadania indexu alebo kľúča.

Príklad

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

Výkon

Bash Array

Ak sa pokúsime vytlačiť obsah vyššie uvedeného skriptu, nebude výstup. Vráti sa prázdny výsledok, pretože pole už neexistuje.

reťazec v porovnaní s

Prvky Slice Array

Bash polia môžu byť tiež rozdelené z daného počiatočného indexu na koncový index.

Na rozdelenie poľa z počiatočného indexu 'm' na koncový index 'n' môžeme použiť nasledujúcu syntax:

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

Príklad

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

Výkon

Bash Array