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