logo

Matrice Bash

In questo argomento, dimostreremo le basi dell'array bash e come vengono utilizzati nello scripting della shell bash.

Un array può essere definito come una raccolta di tipi simili di elementi. A differenza della maggior parte dei linguaggi di programmazione, gli array nello scripting bash non devono necessariamente essere una raccolta di elementi simili. Poiché Bash non discrimina la stringa da un numero, un array può contenere sia stringhe che numeri.

Bash non fornisce supporto per gli array multidimensionali; non possiamo avere gli elementi che sono array di per sé. Bash fornisce il supporto per array unidimensionali indicizzati numericamente e per array associativi. Per accedere all'array indicizzato numericamente dall'ultimo, possiamo utilizzare indici negativi. L'indice '-1' verrà considerato come riferimento per l'ultimo elemento. Possiamo utilizzare diversi elementi in un array.

Dichiarazione dell'array Bash

Gli array in Bash possono essere dichiarati nei seguenti modi:

Creazione di array indicizzati numericamente

Possiamo utilizzare qualsiasi variabile come array indicizzato senza dichiararla.

Per dichiarare esplicitamente una variabile come array Bash, utilizzare la parola chiave 'declare' e la sintassi può essere definita come:

 declare -a ARRAY_NAME 

Dove,

ARRAY_NAME indica il nome che assegneremo all'array.

Nota:Le regole per denominare una variabile in Bash sono le stesse per denominare un array.

Un metodo generale per creare un array indicizzato può essere definito nel seguente formato:

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

dove la parola chiave 'indice' viene utilizzata per definire numeri interi positivi.

Creazione di array associativi

A differenza degli array indicizzati numericamente, gli array associativi vengono prima dichiarati. Possiamo usare la parola chiave 'declare' e l'opzione -A (maiuscola) per dichiarare gli array associativi. La sintassi può essere definita come:

 declare -A ARRAY_NAME 

Un metodo generale per creare un array associativo può essere definito nella forma seguente:

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

dove indice_ viene utilizzato per definire qualsiasi stringa.

Possiamo anche scrivere il modulo sopra nel modo seguente:

non nullo in js
 declare -A ARRAY_NAME ARRAY_NAME=( [index_foo]=value_foo [index_bar]=value_bar [index_xyz]=value_xyz ) 

Inizializzazione dell'array Bash

Per inizializzare un Bash Array, possiamo utilizzare l'operatore di assegnazione (=), specificando l'elenco degli elementi tra parentesi, separati da spazi come di seguito:

 ARRAY_NAME=(element_1st element_2nd element_Nth) 

Nota:In questo caso, il primo elemento avrà un indice 0. Inoltre, non dovrebbe esserci spazio attorno all'operatore di assegnazione (=).

Accedi agli elementi dell'array Bash

Per accedere agli elementi di un Bash Array, possiamo utilizzare la seguente sintassi:

 echo ${ARRAY_NAME[2]} 

Stampa l'array Bash

Possiamo usare la parola chiave 'declare' con un'opzione '-p' per stampare tutti gli elementi di un Bash Array con tutti gli indici e i dettagli. La sintassi per stampare l'array Bash può essere definita come:

 declare -p ARRAY_NAME 

Operazioni sugli array

Una volta assegnato un array, possiamo eseguire alcune operazioni utili su di esso. Possiamo visualizzarne le chiavi e i valori, nonché modificarlo aggiungendo o rimuovendo gli elementi:

Elementi di riferimento

Per fare riferimento a un singolo elemento, è necessario conoscere il numero di indice dell'elemento. Possiamo fare riferimento o stampare qualsiasi elemento utilizzando la seguente sintassi:

 ${ARRAY_NAME[index]} 

Nota:Le parentesi graffe ${} sono necessarie per evitare gli operatori di espansione dei nomi di file della shell.

Ad esempio, stampiamo un elemento di un array con un indice pari a 2:

convertire carattere in stringa

BashScript

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

Produzione

 Javatpoint 

Se usiamo @ o * al posto di un indice specificato, si espanderà a tutti i membri dell'array. Per stampare tutti gli elementi, possiamo utilizzare il seguente modulo:

BashScript

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

Produzione

 Welcome to Javatpoint 

L'unica differenza tra l'utilizzo di @ e * è che il modulo è racchiuso tra virgolette doppie mentre si utilizza @. Nel primo caso (usando @), l'espansione fornisce come risultato una parola per ogni elemento dell'array. Può essere meglio descritto con l'aiuto del 'ciclo for'. Supponiamo di avere un array con tre elementi, 'Welcome', 'To' e 'Javatpoint':

 $ example_array= (Welcome to Javatpoint) 

Applicazione di un ciclo con @:

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

Produrrà il seguente risultato:

 Welcome To Javatpoint 

Applicando un ciclo con *, verrà prodotto un unico risultato che conterrà tutti gli elementi dell'array come un'unica parola:

 Welcome To Javatpoint 

È importante comprendere l'utilizzo di @ e * perché è utile durante l'utilizzo del modulo per scorrere gli elementi dell'array.

Stampa delle chiavi di un array

Possiamo anche recuperare e stampare le chiavi utilizzate negli array indicizzati o associativi, invece dei rispettivi valori. Può essere eseguito aggiungendo il ! operatore prima del nome dell'array come di seguito:

impostato in Java
 ${!ARRAY_NAME[index]} 

Esempio

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

Produzione

 0 1 2 

Trovare la lunghezza dell'array

Possiamo contare il numero di elementi contenuti nell'array utilizzando la seguente forma:

 ${#ARRAY_NAME[@]} 

Esempio

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

Produzione

 The array contains 3 elements 

Passa attraverso l'array

Il metodo generale per scorrere ciascun elemento in un array consiste nell'utilizzare il 'ciclo for'.

Esempio

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

Produzione

Matrice Bash

Un altro metodo comune per eseguire il ciclo di un array è recuperare la lunghezza dell'array e utilizzare il ciclo in stile C:

BashScript

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

Esempio

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

Produzione

 Java Python PHP HTML JavaScript 

Un altro metodo per aggiungere un nuovo elemento a un array consiste nell'utilizzare l'operatore +=. Non è necessario specificare l'indice in questo metodo. Possiamo aggiungere uno o più elementi nell'array utilizzando il seguente modo:

Esempio

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

Produzione

 Java Python PHP JavaScript CSS SQL 

Aggiornamento dell'elemento dell'array

Possiamo aggiornare l'elemento dell'array assegnando un nuovo valore all'array esistente in base al suo valore di indice. Cambiamo l'elemento dell'array all'indice 4 con un elemento 'Javatpoint'.

Esempio

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

Produzione

 We welcome you on Javatpoint 

Eliminazione di un elemento da un array

Se vogliamo eliminare l'elemento dall'array, dobbiamo conoscerne l'indice o la chiave in caso di array associativo. Un elemento può essere rimosso utilizzando il comando ' non settato 'comando:

 unset ARRAY_NAME[index] 

Di seguito è riportato un esempio per comprendere meglio questo concetto:

Esempio

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

Produzione

 Java HTML CSS JavaScript 

Qui abbiamo creato un semplice array composto da cinque elementi, 'Java', 'Python', 'HTML', 'CSS' e 'JavaScript'. Quindi abbiamo rimosso l'elemento 'Python' dall'array utilizzando 'unset' e facendo riferimento al suo indice. L'indice dell'elemento 'Python' era '1', poiché gli array bash iniziano da 0. Se controlliamo gli indici dell'array dopo aver rimosso l'elemento, possiamo vedere che manca l'indice dell'elemento rimosso. Possiamo controllare gli indici aggiungendo il seguente comando nello script:

 echo ${!example_array[@]} 

L'output sarà simile a:

 0 2 3 4 

Questo concetto funziona anche per gli array associativi.

Eliminazione dell'intero array

Eliminare un intero array è un compito molto semplice. Può essere eseguito passando il nome dell'array come argomento al ' non settato ' senza specificare l'indice o la chiave.

Esempio

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

Produzione

Matrice Bash

Non ci sarà alcun output se proviamo a stampare il contenuto dello script precedente. Viene restituito un risultato vuoto perché l'array non esiste più.

Elementi della matrice di sezioni

Gli array Bash possono anche essere suddivisi da un dato indice iniziale a quello finale.

Per suddividere un array dall'indice iniziale 'm' all'indice finale 'n', possiamo utilizzare la seguente sintassi:

prepararsi per il test mockito
 SLICED_ARRAY=(${ARRAY_NAME[@]:m:n}&apos;) 

Esempio

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

Produzione

Matrice Bash