Dalla versione 2 di Bash sono stati introdotti gli array, collezioni ordinate di oggetti che possono essere richiamati univocamente in maniera sistematica, tramite indici numerici (che partono da 0). L'elemento in posizione x
di un array memorizzato nella variabile arr
può essere inizializzato utilizzando la notazione arr[x]
. Quando invece si vuole accedere al valore memorizzato nel medesimo elemento è sempre necessario utilizzare la notazione estesa, ${arr[x]}
, così da distinguere le parentesi quadre usate per l'accesso ad elementi di array, da altri loro utilizzi permessi da Bash.
#!/bin/bash
messaggio[0]="Ciao"
messaggio[1]="Mondo"
echo -n "messaggio[0] = "
echo ${messaggio[0]}
echo -n "messaggio[1] = "
echo ${messaggio[1]}
messaggio[1]="Mondo!"
messaggio[2]="${messaggio[0]} ${messaggio[1]}"
echo ${messaggio[2]}
Un metodo di inizializzazione alternativo di un array è dichiarare inizialmente tutti gli elementi in esso contenuti, usando una diversa notazione:
#!/bin/bash
messaggio=("Ciao" "Mondo!")
echo "${messaggio[0]} ${messaggio[1]}"
Infine, un'altra modalità di assegnamento simile alla precedente consente di specificare anche diverse posizioni per i singoli elementi:
#!/bin/bash
messaggio=([2]="Ciao" [3]="Mondo!")
echo "${messaggio[2]} ${messaggio[3]}"
Operazioni su array
A questo punto è bene passare in rassegna le operazioni più comuni da poter effettuare su un array. Per fare riferimento al suo intero contenuto si utilizza @
o *
come indice; così facendo, negli ultimi due esempi presentati, è possibile sostituire l'ultima riga con la notazione più semplice echo "${messaggio[@]}"
. Il simbolo #
viene anteposto a quest'ultima notazione per conoscere la lunghezza dell'array (cioè il numero di elementi dichiarati effettivamente contenuti in esso), in questo modo:
#!/bin/bash
array=(2 3 4 5)
echo "array contiene ${#array[@]} elementi."
È anche possibile accedere ad una porzione di un array specificandone la posizione di partenza e la lunghezza, come mostrato nell'esempio seguente (è da tener presente che le posizioni partono da 0):
#!/bin/bash
array=(2 3 4 5)
echo "Il secondo e terzo elemento di array sono ${array[@]:1:2}"
Per concludere, si utilizza il comando unset
per rimuovere un elemento di un array (indicandone perciò la posizione racchiusa in parentesi quadre) o per eliminare l'intero array. È utile far presente che nel primo caso gli elementi ancora presenti nell'array manterranno le medesime posizioni anche dopo che l'elemento è stato rimosso, come è facile verificare con il prossimo esempio.
#!/bin/bash
array=(2 3 4 5)
unset array[1]
echo "Ecco il secondo e terzo elemento di array ${array[1]} ${array[2]}"
Gli operatori validi sull'intero contenuto di un array funzionano anche su di un singolo elemento, sostituendo il simbolo @
(o *
) con la sua posizione.
#!/bin/bash
messaggio=("CiaoCiao" "Mondo!Mondo!")
echo "${messaggio[0]:4:4} ${messaggio[1]:6:6}"