Introduzione
Gli array sono una delle strutture dati più utilizzate e fondamentali. Puoi pensare a un array come a una variabile che memorizza più variabili al suo interno. Gli array offrono un modo conveniente per rappresentare e manipolare un gruppo di elementi di dati correlati come una singola entità.
In questo articolo tratteremo gli array Bash e spiegheremo come utilizzarli nei tuoi script Bash.
Array Bash
Bash supporta tipi di array associativi e indicizzati numericamente unidimensionali. Si fa riferimento agli array numerici utilizzando numeri interi e associativi utilizzando stringhe.
È possibile accedere agli array indicizzati numericamente dalla fine utilizzando indici negativi; l'indice dei -1
riferimenti all'ultimo elemento. Gli indici non devono essere contigui.
A differenza della maggior parte dei linguaggi di programmazione, gli elementi dell'array Bash non devono essere dello stesso tipo di dati. Ciò significa che puoi creare un array contenente sia stringhe che numeri.
Bash non supporta gli array multidimensionali e non è possibile avere elementi di array che siano anche array.
Non esiste alcun limite al numero massimo di elementi che possono essere archiviati in un array.
Creazione di array Bash
In Bash, gli array possono essere inizializzati utilizzando diversi metodi.
Creazione di array indicizzati numericamente
Le variabili Bash non sono tipizzate. Qualsiasi variabile può essere utilizzata come array indicizzato senza dichiararla.
Per dichiarare esplicitamente un array, utilizzare il comando incorporato di dichiarazione:
declare -a array_name
Un modo per creare un array indicizzato è utilizzare il seguente modulo:
array_name[index_1]=value_1
array_name[index_2]=value_2
array_name[index_n]=value_n
Dove index_*
è un numero intero positivo.
Un altro modo per creare un array numerico è specificare l'elenco degli elementi tra parentesi, separati da uno spazio vuoto:
array_name=( element_1 element_2 element_N )
Quando l'array viene creato utilizzando il modulo precedente, l'indicizzazione inizia da zero, ovvero il primo elemento ha un indice pari a 0
.
Creazione di array associativi
Gli array associativi sono un tipo di array in cui ogni elemento è identificato da una chiave univoca anziché da un indice.
A differenza degli indici indicizzati numericamente, gli array associativi devono essere dichiarati prima di poter essere utilizzati.
Per dichiarare un array associativo, utilizzare il built-in declare
con l'opzione -A
(maiuscolo):
declare -A array_name
Gli array associativi vengono creati utilizzando il seguente modulo:
declare -A array_name
array_name[index_foo]=value_foo
array_name[index_bar]=value_bar
array_name[index_xyz]=value_xyz
Dove index_*
può essere qualsiasi stringa.
Puoi anche creare un array associativo utilizzando il modulo seguente:
declare -A array_name
array_name=(
[index_foo]=value_foo
[index_bar]=value_bar
[index_xyz]=value_xyz
)
Operazioni sugli array
Se sei nuovo nella programmazione Bash, gli array in Bash all'inizio possono creare confusione. Tuttavia, dopo aver letto questo articolo, li capirai meglio.
Elementi di riferimento
Per fare riferimento a un singolo elemento, è necessario conoscere l'indice dell'elemento.
È possibile fare riferimento a qualsiasi elemento utilizzando la seguente sintassi:
${array_name[index]}
La sintassi per accedere a un elemento dell'array è simile alla sintassi della maggior parte dei linguaggi di programmazione. Le parentesi graffe ${}
sono necessarie per evitare gli operatori di espansione del nome file della shell.
Stampiamo l'elemento con un indice di 1
:
## declare the array
declare -a my_array=( "Hydrogen" "Helium" "Lithium" "Beryllium" )
## print element
echo ${my_array[1]}
Helium
Se si utilizza @
o *
come indice, la parola si espande a tutti i membri dell'array.
Per stampare tutti gli elementi, dovresti usare:
## declare the array
declare -a my_array=( "Hydrogen" "Helium" "Lithium" "Beryllium" )
## print all elements
echo "${my_array[@]}"
Hydrogen Helium Lithium Beryllium
L'unica differenza tra @
e *
è quando il modulo ${my_array[x]}
è racchiuso tra virgolette doppie. In questo caso, *
si espande in una singola parola in cui gli elementi dell'array sono separati da uno spazio. @
espande ogni elemento dell'array in una parola separata. Ciò è particolarmente importante quando si utilizza il modulo per analfabeta attraverso gli elementi dell'array.
Per stampare le chiavi dell'array, aggiungi l' !
operatore prima del nome dell'array:
${!array_name[index]}
Ecco un esempio:
## declare the array
declare -a my_array=( "Hydrogen" "Helium" "Lithium" "Beryllium" )
## print all elements
echo "${!my_array[@]}"
0 1 2 3
Lunghezza della matrice
Se vuoi determinare il numero di elementi in un array, puoi utilizzare la seguente sintassi per ottenere la lunghezza dell'array:
${#array_name[@]}
La sintassi è la stessa di quando si fa riferimento a tutti gli elementi con l'aggiunta del #
carattere prima del nome dell'array.
## declare the array
declare -a my_array=( "Hydrogen" "Helium" "Lithium" "Beryllium" )
## array Length
echo ${#my_array[@]}
4
Passa attraverso l'array
Quando si dispone di una serie di elementi, spesso è necessario eseguire un'operazione su ciascun elemento. Un modo per ottenere ciò è eseguire l'iterazione sull'array utilizzando un ciclo. Il ciclo for
consente di accedere individualmente a ciascun elemento dell'array ed eseguire su di esso l'operazione desiderata.
declare -a my_array=( "Hydrogen" "Helium" "Lithium" "Beryllium" )
## Array Loop
for i in "${my_array[@]}"
do
echo "$i"
done
Il codice sopra eseguirà l'iterazione sull'array e stamperà ogni elemento in una nuova riga:
Hydrogen
Helium
Lithium
Beryllium
Ecco un esempio di come stampare tutte le chiavi e i valori:
declare -a my_array=( "Hydrogen" "Helium" "Lithium" "Beryllium" )
## Array Loop
for i in "${!my_array[@]}"
do
echo "$i" "${my_array[$i]}"
done
0 Hydrogen
1 Helium
2 Lithium
3 Beryllium
Un altro modo per scorrere un array è ottenere la lunghezza dell'array e utilizzare il ciclo C-style
:
declare -a my_array=( "Hydrogen" "Helium" "Lithium" "Beryllium" )
# Length of the array
length=${#my_array[@]}
# Array Loop
for (( i=0; i < ${length}; i++ ))
do
echo $i ${my_array[$i]}
done
0 Hydrogen
1 Helium
2 Lithium
3 Beryllium
Aggiunta di un nuovo elemento
Per aggiungere un nuovo elemento a un array bash e specificarne l'indice, utilizzare il seguente modulo:
my_array[index_n]="New Element"
Ecco un esempio:
declare -a my_array=( "Hydrogen" "Helium" "Lithium" "Beryllium" )
## add new element
my_array[9]="Aluminum"
## print all elements
echo "${my_array[@]}"
Hydrogen Helium Lithium Beryllium Aluminum
Un altro modo per aggiungere un nuovo elemento a un array senza specificare l'indice è utilizzare l'operatore +=
. Puoi aggiungere uno o più elementi:
declare -a my_array=( "Hydrogen" "Helium" "Lithium" "Beryllium" )
## add new elements
my_array+=( Cobalt Nickel )
## print all elements
echo "${my_array[@]}"
Hydrogen Helium Lithium Beryllium Cobalt Nickel
Elimina un elemento
Per eliminare un singolo elemento, dovrai conoscere l'indice dell'elemento. Un elemento può essere rimosso utilizzando il comando unset
:
unset my_array[index]
Vediamo un esempio:
declare -a my_array=( "Hydrogen" "Helium" "Lithium" "Beryllium" )
## remove element
unset my_array[2]
## print all elements
echo "${my_array[@]}"
Hydrogen Helium Beryllium
Conclusione
Abbiamo spiegato come creare array indicizzati numericamente e associativi. Abbiamo anche mostrato come scorrere gli array, calcolare la lunghezza dell'array e aggiungere e rimuovere elementi.
Se hai domande o feedback, sentiti libero di lasciare un commento.