logo

Bash Array

V tomto tématu si ukážeme základy pole bash a jak se používají ve skriptování shellu bash.

Pole lze definovat jako kolekci prvků podobného typu. Na rozdíl od většiny programovacích jazyků nemusí být pole ve skriptování bash sbírkou podobných prvků. Protože Bash nerozlišuje řetězec od čísla, pole může obsahovat řetězce i čísla.

Bash neposkytuje podporu pro vícerozměrná pole; nemůžeme mít prvky, které jsou polemi samy o sobě. Bash poskytuje podporu pro jednorozměrná numericky indexovaná pole i asociativní pole. Pro přístup k číselně indexovanému poli od posledního můžeme použít záporné indexy. Index '-1' bude považován za referenční pro poslední prvek. V poli můžeme použít několik prvků.

Deklarace pole Bash

Pole v Bash lze deklarovat následujícími způsoby:

Vytváření číselně indexovaných polí

Libovolnou proměnnou můžeme použít jako indexované pole, aniž bychom ji deklarovali.

Chcete-li explicitně deklarovat proměnnou jako Bash Array, použijte klíčové slovo 'declare' a syntaxi lze definovat jako:

 declare -a ARRAY_NAME 

kde,

ARRAY_NAME označuje název, který bychom poli přiřadili.

Poznámka:Pravidla pro pojmenování proměnné v Bash jsou stejná pro pojmenování pole.

Obecnou metodu pro vytvoření indexovaného pole lze definovat v následujícím tvaru:

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

kde klíčové slovo 'index' se používá k definování kladných celých čísel.

Vytváření asociativních polí

Na rozdíl od číselně indexovaných polí jsou asociativní pole nejprve deklarována. K deklaraci asociativních polí můžeme použít klíčové slovo 'deklarovat' a volbu -A (velká písmena). Syntaxi lze definovat jako:

 declare -A ARRAY_NAME 

Obecnou metodu pro vytvoření asociativního pole lze definovat v následujícím tvaru:

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

kde index_ se používá k definování libovolného řetězce.

Výše uvedený formulář můžeme také napsat následujícím způsobem:

kolečko myši se neposouvá správně
 declare -A ARRAY_NAME ARRAY_NAME=( [index_foo]=value_foo [index_bar]=value_bar [index_xyz]=value_xyz ) 

Inicializace pole Bash

K inicializaci Bash Array můžeme použít operátor přiřazení (=), zadáním seznamu prvků v závorkách, oddělených mezerami, jak je uvedeno níže:

 ARRAY_NAME=(element_1st element_2nd element_Nth) 

Poznámka:Zde bude mít první prvek index 0. Také by neměla být mezera kolem operátoru přiřazení (=).

Přístup k prvkům pole Bash

Pro přístup k prvkům Bash Array můžeme použít následující syntaxi:

 echo ${ARRAY_NAME[2]} 

Print Bash Array

Můžeme použít klíčové slovo 'deklarovat' s volbou '-p' k vytištění všech prvků Bash Array se všemi indexy a detaily. Syntaxi pro tisk pole Bash lze definovat jako:

 declare -p ARRAY_NAME 

Operace pole

Jakmile je pole přiřazeno, můžeme s ním provádět některé užitečné operace. Můžeme zobrazit jeho klíče a hodnoty a také je upravit přidáním nebo odebráním prvků:

Kat timpf

Referenční prvky

Abychom mohli odkazovat na jeden prvek, musíme znát indexové číslo prvku. Můžeme odkazovat nebo tisknout jakýkoli prvek pomocí následující syntaxe:

 ${ARRAY_NAME[index]} 

Poznámka:Složené závorky ${} jsou vyžadovány, aby se předešlo operátorům rozšíření názvu souboru shellu.

Vytiskněme například prvek pole s indexem 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ýstup

 Javatpoint 

Pokud místo zadaného indexu použijeme @ nebo *, rozšíří se na všechny členy pole. Pro tisk všech prvků můžeme použít následující formulář:

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ýstup

 Welcome to Javatpoint 

Jediný rozdíl mezi použitím @ a * je ten, že při použití @ je formulář obklopen dvojitými uvozovkami. V prvním případě (při použití @) poskytuje expanze výsledek ve slově pro každý prvek pole. Lépe to lze popsat pomocí „smyčky for“. Předpokládejme, že máme pole se třemi prvky, 'Welcome', 'To' a 'Javatpoint':

 $ example_array= (Welcome to Javatpoint) 

Použití smyčky s @:

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

Výsledkem bude následující:

 Welcome To Javatpoint 

Při použití smyčky s * bude vytvořen jediný výsledek, který bude obsahovat všechny prvky pole jako jediné slovo:

 Welcome To Javatpoint 

Je důležité porozumět použití @ a *, protože je užitečné při použití formuláře k iteraci prvků pole.

Tisk klíčů pole

Můžeme také načíst a vytisknout klíče používané v indexovaných nebo asociativních polích místo jejich příslušných hodnot. To lze provést přidáním ! operátor před názvem pole, jak je uvedeno níže:

testování a typy softwaru
 ${!ARRAY_NAME[index]} 

Pří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ýstup

 0 1 2 

Nalezení délky pole

Počet prvků obsažených v poli můžeme spočítat pomocí následujícího formuláře:

 ${#ARRAY_NAME[@]} 

Příklad

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

Výstup

 The array contains 3 elements 

Projděte polem

Obecnou metodou pro iteraci každé položky v poli je použití „smyčky for“.

Pří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ýstup

Bash Array

Další běžnou metodou, jak procházet polem, je načíst délku pole a použít smyčku ve stylu 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};>

Pří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ýstup

 Java Python PHP HTML JavaScript 

Další metodou pro přidání nového prvku do pole je použití operátoru +=. V této metodě není nutné zadávat index. Do pole můžeme přidat jeden nebo více prvků následujícím způsobem:

Pří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ýstup

 Java Python PHP JavaScript CSS SQL 

Aktualizace prvku pole

Prvek pole můžeme aktualizovat tak, že stávajícímu poli přiřadíme novou hodnotu podle jeho hodnoty indexu. Změňme prvek pole na indexu 4 prvkem 'Javatpoint'.

Pří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ýstup

 We welcome you on Javatpoint 

Odstranění prvku z pole

Pokud chceme prvek z pole odstranit, musíme znát jeho index nebo klíč v případě asociativního pole. Prvek lze odstranit pomocí ' odstaveno ' příkaz:

 unset ARRAY_NAME[index] 

Níže je uveden příklad, který vám lépe porozumí tomuto konceptu:

Pří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ýstup

hashmap java
 Java HTML CSS JavaScript 

Zde jsme vytvořili jednoduché pole skládající se z pěti prvků, 'Java', 'Python', 'HTML', 'CSS' a 'JavaScript'. Poté jsme z pole odstranili prvek 'Python' pomocí 'unset' a odkazem na jeho index. Index prvku 'Python' byl '1', protože pole bash začínají od 0. Pokud po odebrání prvku zkontrolujeme indexy pole, vidíme, že index odebraného prvku chybí. Indexy můžeme zkontrolovat přidáním následujícího příkazu do skriptu:

 echo ${!example_array[@]} 

Výstup bude vypadat takto:

 0 2 3 4 

Tento koncept funguje také pro asociativní pole.

Smazání celého pole

Smazání celého pole je velmi jednoduchý úkol. Lze to provést předáním názvu pole jako argumentu do ' odstaveno ' bez zadání indexu nebo klíče.

Pří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ýstup

Bash Array

Pokud se pokusíme vytisknout obsah výše uvedeného skriptu, nedojde k žádnému výstupu. Je vrácen prázdný výsledek, protože pole již neexistuje.

Prvky Slice Array

Bashová pole lze také dělit z daného počátečního indexu na koncový index.

K rozdělení pole z počátečního indexu 'm' na koncový index 'n' můžeme použít následující syntaxi:

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

Pří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ýstup

Bash Array