logo

Bash Array

Ebben a témában bemutatjuk a bash tömb alapjait és azt, hogy hogyan használják őket a bash shell szkriptekben.

Egy tömb hasonló típusú elemek gyűjteményeként definiálható. A legtöbb programozási nyelvtől eltérően a bash szkriptekben a tömböknek nem kell hasonló elemek gyűjteményének lennie. Mivel a Bash nem különbözteti meg a karakterláncot a számtól, a tömb karakterláncokat és számokat is tartalmazhat.

A Bash nem támogatja a többdimenziós tömböket; nem rendelkezhetünk olyan elemekkel, amelyek önmagukban tömbök. A Bash támogatja az egydimenziós, numerikusan indexelt tömböket, valamint az asszociatív tömböket. A numerikusan indexelt tömb utolsóból való eléréséhez negatív indexeket használhatunk. A „-1” index az utolsó elem hivatkozási alapja. Egy tömbben több elemet is használhatunk.

Bash Array nyilatkozat

A Bash tömbjei a következő módokon deklarálhatók:

Numerikusan indexelt tömbök létrehozása

Bármely változót használhatunk indexelt tömbként anélkül, hogy deklarálnánk.

Egy változó Bash tömbként való explicit deklarálásához használja a 'declare' kulcsszót, és a szintaxis a következőképpen definiálható:

 declare -a ARRAY_NAME 

ahol,

Az ARRAY_NAME azt a nevet jelöli, amelyet a tömbhöz rendelnénk.

Jegyzet:A változók Bash-ban való elnevezésének szabályai ugyanazok, mint egy tömb elnevezése.

Az indexelt tömb létrehozásának általános módszere a következő formában definiálható:

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

ahol az „index” kulcsszó pozitív egész számok meghatározására szolgál.

Asszociatív tömbök létrehozása

A numerikusan indexelt tömböktől eltérően az asszociatív tömböket először deklarálják. Az asszociatív tömbök deklarálásához használhatjuk a 'declare' kulcsszót és a -A (nagybetűs) opciót. A szintaxis a következőképpen definiálható:

 declare -A ARRAY_NAME 

Az asszociatív tömb létrehozásának általános módszere a következő formában definiálható:

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

ahol az index_ bármely karakterlánc meghatározására szolgál.

A fenti űrlapot a következő módon is megírhatjuk:

visszahívási pokol javascriptben
 declare -A ARRAY_NAME ARRAY_NAME=( [index_foo]=value_foo [index_bar]=value_bar [index_xyz]=value_xyz ) 

Bash tömb inicializálása

A Bash Array inicializálásához használhatjuk a hozzárendelési operátort (=), az elemek listáját zárójelben megadva, szóközzel elválasztva az alábbiak szerint:

 ARRAY_NAME=(element_1st element_2nd element_Nth) 

Jegyzet:Itt az első elem indexe 0 lesz. A hozzárendelési operátor (=) körül sem szabad szóközt hagyni.

Hozzáférés a Bash Array elemeihez

A Bash Array elemeinek eléréséhez a következő szintaxist használhatjuk:

np hol
 echo ${ARRAY_NAME[2]} 

Bash Array nyomtatása

Használhatjuk a 'declare' kulcsszót egy '-p' opcióval, hogy kinyomtassuk a Bash Array összes elemét az összes indexel és részlettel együtt. A Bash Array nyomtatásának szintaxisa a következőképpen határozható meg:

 declare -p ARRAY_NAME 

Tömbműveletek

Egy tömb hozzárendelése után néhány hasznos műveletet hajthatunk végre rajta. Kulcsait és értékeit megjeleníthetjük, illetve módosíthatjuk az elemek hozzáadásával vagy eltávolításával:

Referencia elemek

Egyetlen elemre való hivatkozáshoz ismernünk kell az elem indexszámát. Bármely elemre hivatkozhatunk vagy nyomtathatunk a következő szintaxis használatával:

 ${ARRAY_NAME[index]} 

Jegyzet:A ${} kapcsos zárójelek szükségesek a shell fájlnévbővítő operátorainak elkerülése érdekében.

Például nyomtassuk ki egy 2-es indexű tömb elemét:

Bash Script

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

Kimenet

 Javatpoint 

Ha egy megadott index helyén @ vagy *-t használunk, akkor az a tömb összes tagjára bővül. Az összes elem kinyomtatásához a következő űrlapot használhatjuk:

Bash Script

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

Kimenet

 Welcome to Javatpoint 

Az egyetlen különbség a @ és a * használata között az, hogy az űrlapot dupla idézőjelek veszik körül @ használatakor. Az első esetben (a @ használatakor) a kiterjesztés egy szóban ad eredményt a tömb minden eleméhez. Jobban leírható a 'for ciklus' segítségével. Tegyük fel, hogy van egy három elemű tömbünk: „Welcome”, „To” és „Javatpoint”:

 $ example_array= (Welcome to Javatpoint) 

Hurok alkalmazása @ jellel:

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

A következő eredményt fogja produkálni:

 Welcome To Javatpoint 

Ha egy ciklust *-gal alkalmazunk, akkor egyetlen eredményt kapunk, amely a tömb összes elemét egyetlen szóként tartalmazza:

 Welcome To Javatpoint 

Fontos, hogy megértsük a @ és a * használatát, mert hasznos az űrlap használatakor a tömbelemek közötti iterációhoz.

Egy tömb kulcsainak kinyomtatása

Az indexelt vagy asszociatív tömbökben használt kulcsokat is lekérhetjük és kinyomtathatjuk a megfelelő értékek helyett. A ! operátor a tömbnév előtt, az alábbiak szerint:

hasonló karakterlánc
 ${!ARRAY_NAME[index]} 

Példa

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

Kimenet

 0 1 2 

A tömb hosszának megkeresése

A tömbben lévő elemek számát a következő űrlap segítségével számolhatjuk meg:

 ${#ARRAY_NAME[@]} 

Példa

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

Kimenet

 The array contains 3 elements 

Hurok át a tömbön

A tömb minden eleme feletti iteráció általános módja a „for ciklus” használata.

Példa

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

Kimenet

Bash Array

Egy másik gyakori módszer a tömbön való áthurkolásra a tömb hosszának lekérése és a C-stílusú hurok használata:

Bash Script

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

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

Kimenet

 Java Python PHP HTML JavaScript 

Egy másik módszer új elem tömbhöz való hozzáadására a += operátor használata. Ebben a módszerben nem szükséges megadni az indexet. Egy vagy több elemet hozzáadhatunk a tömbhöz a következő módon:

Példa

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

Kimenet

 Java Python PHP JavaScript CSS SQL 

A tömbelem frissítése

Frissíthetjük a tömbelemet úgy, hogy a meglévő tömbhöz indexértékével új értéket rendelünk. Változtassuk meg a 4-es indexű tömbelemet a 'Javatpoint' elemmel.

Példa

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

Kimenet

 We welcome you on Javatpoint 

Elem törlése egy tömbből

Ha törölni akarjuk az elemet a tömbből, akkor asszociatív tömb esetén ismernünk kell az indexét vagy kulcsát. Egy elem eltávolítható a ' nincs beállítva ' parancs:

 unset ARRAY_NAME[index] 

Az alábbiakban egy példa látható, hogy jobban megértse ezt a fogalmat:

Példa

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

Kimenet

 Java HTML CSS JavaScript 

Itt egy egyszerű tömböt hoztunk létre, amely öt elemből áll: „Java”, „Python”, „HTML”, „CSS” és „JavaScript”. Ezután eltávolítottuk a „Python” elemet a tömbből az „unset” használatával, és hivatkoztunk az indexére. A 'Python' elem indexe '1' volt, mivel a bash tömbök 0-ról indulnak. Ha az elem eltávolítása után ellenőrizzük a tömb indexeit, láthatjuk, hogy az eltávolított elem indexe hiányzik. Az indexeket úgy tudjuk ellenőrizni, hogy hozzáadjuk a következő parancsot a szkripthez:

 echo ${!example_array[@]} 

A kimenet így fog kinézni:

 0 2 3 4 

Ez a koncepció az asszociatív tömbök esetében is működik.

A teljes tömb törlése

A teljes tömb törlése nagyon egyszerű feladat. Ez úgy hajtható végre, hogy a tömb nevét argumentumként adjuk át a ' nincs beállítva ' parancsot az index vagy a kulcs megadása nélkül.

Példa

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

Kimenet

Bash Array

Nem lesz kimenet, ha megpróbáljuk kinyomtatni a fenti script tartalmát. A rendszer üres eredményt ad vissza, mert a tömb már nem létezik.

0,0625 törtként

Szelet tömbelemek

A Bash tömbök egy adott kezdőindextől a záróindexig is szeletelhetők.

Ha egy tömböt az „m” kezdőindextől az „n” végindexig szeretnénk szeletelni, a következő szintaxist használhatjuk:

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

Példa

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

Kimenet

Bash Array