logo

Bash Array

În acest subiect, vom demonstra elementele de bază ale matricei bash și modul în care acestea sunt utilizate în scripturile shell bash.

O matrice poate fi definită ca o colecție de elemente de tip similar. Spre deosebire de majoritatea limbajelor de programare, matricele din scripting bash nu trebuie să fie o colecție de elemente similare. Deoarece Bash nu discriminează șirul de un număr, o matrice poate conține atât șiruri, cât și numere.

Bash nu oferă suport pentru tablourile multidimensionale; nu putem avea elementele care sunt tablouri în sine. Bash oferă suport pentru tablouri unidimensionale indexate numeric, precum și pentru tablouri asociative. Pentru a accesa tabloul indexat numeric din ultimul, putem folosi indici negativi. Indicele lui „-1” va fi considerat ca referință pentru ultimul element. Putem folosi mai multe elemente dintr-o matrice.

Declarație Bash Array

Matricele în Bash pot fi declarate în următoarele moduri:

Crearea de tablouri indexate numeric

Putem folosi orice variabilă ca matrice indexată fără a o declara.

Pentru a declara explicit o variabilă ca Bash Array, utilizați cuvântul cheie „declare” și sintaxa poate fi definită ca:

 declare -a ARRAY_NAME 

Unde,

ARRAY_NAME indică numele pe care l-am atribui matricei.

Notă:Regulile de denumire a unei variabile în Bash sunt aceleași pentru denumirea unui tablou.

O metodă generală de a crea o matrice indexată poate fi definită în următoarea formă:

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

unde cuvântul cheie „index” este folosit pentru a defini numere întregi pozitive.

Crearea de tablouri asociative

Spre deosebire de tablourile indexate numeric, tablourile asociative sunt mai întâi declarate. Putem folosi cuvântul cheie „declare” și opțiunea -A (majuscule) pentru a declara tablourile asociative. Sintaxa poate fi definită astfel:

 declare -A ARRAY_NAME 

O metodă generală de a crea o matrice asociativă poate fi definită în următoarea formă:

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

unde index_ este folosit pentru a defini orice șir.

De asemenea, putem scrie formularul de mai sus în felul următor:

java char la întreg
 declare -A ARRAY_NAME ARRAY_NAME=( [index_foo]=value_foo [index_bar]=value_bar [index_xyz]=value_xyz ) 

Inițializarea matricei Bash

Pentru a inițializa un Bash Array, putem folosi operatorul de atribuire (=), prin specificarea listei de elemente din paranteze, separate prin spații ca mai jos:

 ARRAY_NAME=(element_1st element_2nd element_Nth) 

Notă:Aici, primul element va avea un indice 0. De asemenea, nu ar trebui să existe spațiu în jurul operatorului de atribuire (=).

Accesați elementele Bash Array

Pentru a accesa elementele unui tablou Bash, putem folosi următoarea sintaxă:

 echo ${ARRAY_NAME[2]} 

Print Bash Array

Putem folosi cuvântul cheie „declare” cu opțiunea „-p” pentru a imprima toate elementele unui Bash Array cu toți indecșii și detaliile. Sintaxa de tipărire a tabloului Bash poate fi definită astfel:

 declare -p ARRAY_NAME 

Operații cu matrice

Odată ce o matrice este atribuită, putem efectua câteva operații utile asupra acesteia. Îi putem afișa cheile și valorile, precum și le putem modifica prin adăugarea sau eliminarea elementelor:

converti char în șir

Elemente de referință

Pentru a face referire la un singur element, trebuie să cunoaștem numărul de index al elementului. Putem face referire sau tipări orice element folosind următoarea sintaxă:

 ${ARRAY_NAME[index]} 

Notă:Acoladele ${} sunt necesare pentru a evita operatorii de extindere a numelui fișierelor din shell.

De exemplu, să tipărim un element dintr-o matrice cu un indice de 2:

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]} 

Ieșire

 Javatpoint 

Dacă folosim @ sau * în locul unui index specificat, acesta se va extinde la toți membrii matricei. Pentru a imprima toate elementele, putem folosi următorul formular:

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

Ieșire

 Welcome to Javatpoint 

Singura diferență între utilizarea @ și * este că formularul este înconjurat de ghilimele duble în timp ce utilizați @. În primul caz (în timpul utilizării @), expansiunea oferă un rezultat într-un cuvânt pentru fiecare element al matricei. Poate fi descris mai bine cu ajutorul „bucla for”. Să presupunem că avem o matrice cu trei elemente, „Welcome”, „To” și „Javatpoint”:

 $ example_array= (Welcome to Javatpoint) 

Aplicarea unei bucle cu @:

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

Va produce următorul rezultat:

 Welcome To Javatpoint 

Aplicând o buclă cu *, se va produce un singur rezultat care conține toate elementele matricei ca un singur cuvânt:

 Welcome To Javatpoint 

Este important să înțelegeți modul de utilizare a @ și * deoarece este util în timp ce utilizați formularul pentru a repeta prin elementele matricei.

Imprimarea cheilor unui tablou

De asemenea, putem prelua și imprima cheile utilizate în tablourile indexate sau asociative, în locul valorilor respective. Se poate realiza prin adăugarea ! operator înainte de numele matricei, după cum urmează:

curs de matematică java
 ${!ARRAY_NAME[index]} 

Exemplu

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

Ieșire

 0 1 2 

Găsirea lungimii matricei

Putem număra numărul de elemente conținute în matrice folosind următoarea formă:

 ${#ARRAY_NAME[@]} 

Exemplu

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

Ieșire

 The array contains 3 elements 

Buclă prin matrice

Metoda generală de iterare peste fiecare element dintr-o matrice este folosirea „buclei for”.

Exemplu

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

Ieșire

Bash Array

O altă metodă comună de a bucla printr-o matrice este de a prelua lungimea matricei și de a utiliza bucla în stil C:

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};>

Exemplu

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

Ieșire

 Java Python PHP HTML JavaScript 

O altă metodă pentru adăugarea unui nou element într-o matrice este utilizarea operatorului +=. Nu este nevoie să specificați indexul în această metodă. Putem adăuga unul sau mai multe elemente în matrice utilizând următorul mod:

Exemplu

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

Ieșire

 Java Python PHP JavaScript CSS SQL 

Actualizarea elementului Array

Putem actualiza elementul matricei atribuind o nouă valoare matricei existente după valoarea sa de index. Să schimbăm elementul de matrice de la indexul 4 cu un element „Javatpoint”.

Exemplu

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

Ieșire

 We welcome you on Javatpoint 

Ștergerea unui element dintr-o matrice

Dacă vrem să ștergem elementul din tablou, trebuie să cunoaștem indexul sau cheia acestuia în cazul unui tablou asociativ. Un element poate fi eliminat utilizând „ dezinstalat 'comandă:

 unset ARRAY_NAME[index] 

Mai jos este prezentat un exemplu pentru a vă oferi o mai bună înțelegere a acestui concept:

Exemplu

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

Ieșire

 Java HTML CSS JavaScript 

Aici, am creat o matrice simplă constând din cinci elemente, „Java”, „Python”, „HTML”, „CSS” și „JavaScript”. Apoi am eliminat elementul „Python” din matrice folosind „unset” și referirea la indexul acestuia. Indicele elementului „Python” a fost „1”, deoarece tablourile bash încep de la 0. Dacă verificăm indecșii matricei după eliminarea elementului, putem vedea că indexul pentru elementul eliminat lipsește. Putem verifica indecșii adăugând următoarea comandă în script:

 echo ${!example_array[@]} 

Ieșirea va arăta astfel:

 0 2 3 4 

Acest concept funcționează și pentru tablourile asociative.

Ștergerea întregii matrice

Ștergerea unei întregi matrice este o sarcină foarte simplă. Poate fi efectuat prin trecerea numelui matricei ca argument la „ neasezat ' fără a specifica indexul sau cheia.

Exemplu

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

Ieșire

Bash Array

Nu va exista nicio ieșire dacă încercăm să tipărim conținutul scriptului de mai sus. Este returnat un rezultat gol deoarece matricea nu mai există.

Slice Array Elements

Matricele Bash pot fi, de asemenea, tăiate dintr-un index de început dat la indexul final.

lista comparabila

Pentru a tăia o matrice de la indexul de început „m” la un index final „n”, putem folosi următoarea sintaxă:

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

Exemplu

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

Ieșire

Bash Array