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