Una guida agli array Bash

In questa guida sugli array Bash, imparerai come dichiarare e lavorare con array indicizzati e associativi in ​​Bash.

In Bash, puoi creare array per memorizzare una raccolta di elementi. Gli array Bash sono raccolte unidimensionali. Nei linguaggi di programmazione come C e C++, gli array sono raccolte di elementi dello stesso tipo di dati. Tuttavia, in Bash, a seconda del caso d’uso, è possibile memorizzare numeri interi e stringhe nello stesso array.

In questo tutorial imparerai come dichiarare un array Bash e accedere ai suoi elementi. Imparerai quindi come scorrere gli elementi di un array e aggiungere elementi a un array. Infine, imparerai a conoscere gli array associativi in ​​Bash.

Cominciamo!

⚙ Interessato a programmare insieme? Ecco i prerequisiti:

Come dichiarare un array Bash

In questa sezione imparerai la sintassi per dichiarare un array Bash ed esempi di codice.

Sintassi della dichiarazione dell’array Bash

Puoi dichiarare un array in Bash usando la seguente sintassi:

$ arrayName=(elt1 elt2 ... eltN)

# arrayName is the name of the array
# elt1 through eltN are the N elements in the array

Nella sintassi precedente, arrayName denota il nome dell’array che contiene N elementi elt1…eltN.

Gli elementi di un array sono racchiusi tra le parentesi di apertura e di chiusura (). Si noti inoltre che gli elementi dell’array sono separati da uno spazio bianco. Come con qualsiasi variabile Bash, non dovrebbero esserci spazi bianchi prima o dopo l’operatore di assegnazione =.

📑 Nella maggior parte degli altri linguaggi di programmazione, separerai gli elementi di un array o raccolte simili con virgole. Ma in Bash, lo spazio bianco è il separatore.

In Bash, tali array in cui gli elementi sono identificati dal loro indice sono indicati come array indicizzati.

Dichiarazione di array indicizzati in Bash

Creiamo i prezzi, una matrice di numeri.

$ prices=(24 27 18 30 15)

Come accennato nella sintassi, i numeri nell’array dei prezzi sono separati da uno spazio bianco, racchiusi tra parentesi, senza spazi prima e dopo l’operatore di assegnazione =.

In Bash, puoi usare il comando echo per stampare il valore di una variabile. L’utilizzo di $variableName stampa il valore di variableName. Tuttavia, puoi vedere che l’utilizzo del nome dell’array stampa solo il primo elemento.

$ echo $prices
24

Gli array bash seguono l’indicizzazione zero. Quindi il primo elemento è all’indice 0, il secondo elemento è all’indice 1 e così via. Puoi anche utilizzare l’indicizzazione negativa; l’indice dell’ultimo elemento dell’array è -1.

Cosa succede se provi ad accedere all’elemento in un particolare indice e lo stampi? Proviamo a stampare l’elemento all’indice 1.

$ echo $prices[1]
24[1]

Perché l’uscita è 24[1]? 🤔 Questo perché Bash sostituisce $prices con 24, il primo elemento dell’array and [1] viene stampato come tale.

Per stampare l’elemento in corrispondenza di un particolare indice, è possibile utilizzare l’espansione del parametro della forma ${prices[index]}.

$ echo ${prices[1]}
# 27
$ echo ${prices[2]}
# 18

Per stampare tutti gli elementi nell’array, puoi specificare @ invece di un indice specifico.

$ echo ${prices[@]}
24 27 18 30 15

Successivamente, creiamo un array di stringhe. L’esecuzione del seguente comando crea un array indicizzato:

$ declare -a fruits

L’opzione -a crea un array indicizzato. È ora possibile popolare l’array, un elemento alla volta, dichiarando l’elemento in corrispondenza di un indice specifico, come mostrato di seguito:

$ fruits[0]="cherry"
$ fruits[1]="berry"
$ fruits[2]="apple"
$ fruits[3]="pear"
$ fruits[4]="melon"
$ fruits[5]="orange"

Ora, per stampare tutti gli elementi dell’array, puoi usare ${fruits[@]}.

$ echo ${fruits[@]}
cherry berry apple pear melon orange

Accedi agli elementi di un array Bash

È possibile accedere agli elementi dell’array nei seguenti modi:

  • Passa attraverso l’array e accedi direttamente all’elemento
  • Passa in rassegna l’insieme di indici e accedi agli elementi in corrispondenza di un indice specifico

Passa attraverso l’array e accedi agli elementi

Se hai codificato in Python, avrai utilizzato il ciclo for utilizzando la seguente sintassi:

for elt in some_list:
    print(elt)

Ora scriviamo l’equivalente Bash del precedente ciclo for.

Sappiamo che {prices[@]} si espande a tutti gli elementi nell’array dei prezzi. E ${prezzi[@]} ci fornisce i valori di tutti gli elementi.

Il ciclo for di Bash è simile alla sintassi del ciclo for di Python, ma le istruzioni nel corpo del ciclo dovrebbero essere racchiuse tra do e done, come mostrato:

$ for price in ${prices[@]}
> do
> echo $price
> done

Poiché utilizziamo il comando echo e stampiamo il valore della variabile price, otteniamo il seguente output:

# output
24
27
18
30
15

Accedere agli elementi utilizzando l’indice dell’array

Un altro modo per scorrere gli array è utilizzare l’indice degli elementi. Questo è simile al costrutto del ciclo for in Python che usa la funzione range():

for i in range(len(some_list)):
    print(i)

Per ottenere un elenco di indici da scorrere, è possibile inserire un punto esclamativo (!) prima del nome dell’array nell’espansione del parametro. Questo ti darà l’elenco di tutti gli indici validi per l’array, come mostrato:

$ echo ${!prices[@]}
0 1 2 3 4

L’array dei prezzi contiene 5 elementi, quindi l’indice inizia da 0 e sale fino a 4.

Successivamente, possiamo scorrere l’elenco degli indici e accedere all’elemento in ogni indice. Per l’indice i, ${prices[i]} è l’elemento all’indice i.

$ for i in ${!prices[@]}
> do
> echo ${prices[i]}
> done

Il ciclo precedente stampa tutti gli elementi dell’array.

# output
24
27
18
30
15

💬 Qui, dopo aver effettuato l’accesso a ciascun elemento, eseguiamo una semplice operazione di stamparne il valore. In generale, possiamo avere qualsiasi elaborazione valida sugli elementi.

Aggiungi elementi a un array Bash

Nell’array dei prezzi, abbiamo cinque elementi (agli indici 0,1,2,3 e 4). Se vuoi aggiungere un elemento alla fine dell’array all’indice 5, puoi farlo come segue:

$ prices[5]=21

Vediamo che 21 è stato aggiunto alla fine dell’array dei prezzi.

$ echo ${prices[@]}
24 27 18 30 15 21

Tuttavia, è più conveniente aggiungere alla fine dell’array, senza ricordare, l’indice dell’ultimo elemento aggiunto o il numero di elementi attualmente presenti nell’array.

Puoi usare arrayName+=(elements(s)) it per aggiungere uno o più elementi a un array, come mostrato:

$ prices+=(10)

Ora, se stampiamo l’array dei prezzi, vediamo che 10 è stato aggiunto alla fine dell’array.

$ echo ${prices[@]}
24 27 18 30 15 21 10

Successivamente, impariamo come dichiarare array associativi in ​​Bash.

Array associativi in ​​Bash

Se desideri definire una relazione in termini di coppie chiave-valore, puoi utilizzare un array associativo. È possibile dichiarare un array associativo utilizzando la seguente sintassi generale. Si noti che usiamo l’opzione -A invece di -a.

$ declare -A fruits_prices

È possibile aggiungere elementi all’array associativo specificando la chiave e il valore corrispondente. Qui abbiamo aggiunto i nomi dei frutti come chiavi e i numeri dall’array dei prezzi come valori.

$ fruits_prices[cherry]=24
$ fruits_prices[berry]=27
$ fruits_prices[apple]=18
$ fruits_prices[pear]=30
$ fruits_prices[melon]=15
$ fruits_prices[orange]=21

Quindi, come accediamo agli elementi in un array associativo?

Proprio come faresti per cercare il valore usando la chiave corrispondente in un dizionario Python, puoi accedere ai valori in un array associativo usando le chiavi.

$ echo ${fruits_prices[berry]}
# 27

Vediamo che ${fruits_prices[@]} si espande nei valori e ${!fruits_prices[@]} si espande nelle chiavi.

$ echo ${fruits_prices[@]}
# Output: 18 27 21 24 30 15
$ echo ${!fruits_prices[@]}
# Output: apple berry orange cherry pear melon

Nota: l’ordine degli elementi non è lo stesso dell’ordine in cui li abbiamo aggiunti. Questo perché, a differenza degli array indicizzati, gli array associativi non sono raccolte ordinate. Piuttosto, lavorano sull’associazione tra le chiavi ei valori. Pertanto, le chiavi stanno agli array associativi come gli indici stanno agli array di indici.

Puoi anche scorrere l’array associativo e accedere alle chiavi, come mostrato:

$ for key in ${!fruits_prices[@]}
> do
> echo $key
> done
# Output
apple
berry
orange
cherry
pear
melon

Il ciclo seguente mostra come accedere ai valori.

$ for value in ${fruits_prices[@]}
> do
> echo $value
> done
# Output
18
27
21
24
30
15

Sebbene sia consigliabile utilizzare arrayName[key]=valore, puoi anche dichiararlo come una sequenza come questa:

declare -A arrayName
arrayName=(key1 value1 key2 value2 ... keyN valueN)

In questo modo, Bash deduce il primo elemento come prima chiave, il secondo elemento come primo valore e così via.

Riassumendo

Spero che tu ora capisca come creare e lavorare con gli array Bash. Ecco una rapida rassegna di ciò che hai imparato.

  • È possibile dichiarare un array indicizzato in Bash utilizzando la sintassi arrayName=(elt1 elt2 elt3 … eltN) oppure eseguire Declaration -a arrayName e aggiungere elementi all’array.
  • Per accedere agli elementi, puoi eseguire il ciclo usando ${arrayName[@]}. In alternativa, puoi ottenere l’elenco di tutti gli indici validi utilizzando l’espansione del parametro ${!arrayName[@]}.
  • Infine, hai anche imparato a dichiarare un array associativo per memorizzare coppie chiave-valore in Bash.

Quindi, controlla il tutorial per i loop in Bash.