Come usare gli array in Bash

9 feb 2024 4 min di lettura
Come usare gli array in Bash
Indice dei contenuti

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 -1riferimenti 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 @*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 @*è 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.

Support us with a

Successivamente, completa il checkout per l'accesso completo a Noviello.it.
Bentornato! Accesso eseguito correttamente.
Ti sei abbonato con successo a Noviello.it.
Successo! Il tuo account è completamente attivato, ora hai accesso a tutti i contenuti.
Operazione riuscita. Le tue informazioni di fatturazione sono state aggiornate.
La tua fatturazione non è stata aggiornata.