Questo è il secondo articolo come parte degli array bash. Nell'articolo precedente, abbiamo discusso di come lavorare con array indicizzati in Bash . In questa guida parleremo di Bash Associative Array in dettaglio con esempi in Linux.
Gli array associativi funzionano in base a coppie chiave-valore. In alcune lingue viene anche chiamato dizionari o mappe hash . La principale differenza tra gli array indicizzati e associativi è che gli array indicizzati funzionano in base al valore dell'indice e ogni elemento nell'array è mappato a una particolare posizione dell'indice dell'array. Un array associativo utilizza una "chiave" per mappare il valore invece delle posizioni dell'indice.
Entriamo e vediamo come utilizzare l'array associativo in bash.
Inizializza array associativo
A differenza di un array indicizzato, non puoi inizializzare un array associativo senza usare declare
comando.
Usa la declare
comando con -A
bandiera.
$ declare -A STAR_PLAYERS=()
Ora un array vuoto chiamato "STAR_PLAYERS" è creato. Se lo desideri puoi anche aggiungere elementi all'array direttamente durante l'inizializzazione.
$ declare -A STAR_PLAYERS=( [Argentina]="Messi" [Brazil]="Neymar" [England]="Kane" )
Nel codice sopra, le chiavi sono racchiuse tra parentesi quadre e i valori devono essere seguiti dal segno uguale senza spazi. Non è necessario utilizzare una virgola o un punto e virgola come separatore tra gli elementi.
Per una migliore leggibilità, puoi scrivere gli elementi dell'array su più righe.
$ declare -A STAR_PLAYERS=( [Argentina]="Messi" [Brazil]="Neymar" [England]="Rooney" )
Visualizza elementi dell'array
Devi usare echo
o printf
comando in bash per stampare il contenuto dell'array. Simile a come abbiamo usato la variabile speciale *
e @
per stampare l'array indicizzato, lo stesso dovrebbe essere utilizzato anche per stampare gli array associativi.
$ echo ${STAR_PLAYERS[@]}
$ echo ${STAR_PLAYERS[*]}

C'è una differenza significativa tra *
e @
e per conoscere la differenza tra *
e @
e come funziona con l'array, fai riferimento alla sezione "Ciclo sugli elementi dell'array" nel nostro Bash For Loop guida.
Se provi a stampare gli elementi dell'array senza usare *
o @
, l'output sarà vuoto.
$ echo ${STAR_PLAYERS}

Inoltre, se dai un'occhiata all'output sopra, vengono stampati solo i valori e non le chiavi. I valori che stampi non verranno ordinati. Puoi afferrare il valore di un particolare elemento usando la sua chiave.
$ echo ${STAR_PLAYERS[Brazil]}

Aggiungi nuovi elementi all'array
Aggiungere un nuovo elemento all'array è semplice. Tutto quello che devi fare è creare una nuova coppia chiave-valore come mostrato di seguito.
$ STAR_PLAYERS[Belgium]="Hazard"
$ echo ${STAR_PLAYERS[@]}

Se provi a utilizzare la stessa chiave che è già presente nell'array, il valore verrà sovrascritto con quello nuovo.
$ STAR_PLAYERS[England]="Sterling"
$ echo ${STAR_PLAYERS[@]}

Aggiungi nuovi elementi all'array
Puoi anche aggiungere elementi a un array usando la seguente sintassi.
$ STAR_PLAYERS+=([Spain]="Ramos")
$ echo ${STAR_PLAYERS[@]}

Stampa coppia chiave e valore
Dagli esempi precedenti, potresti aver capito che vengono stampati solo i valori. Puoi ottenere l'elenco delle chiavi da solo anteponendo il "!"
simbolo con l'array.
$ echo ${!STAR_PLAYERS[@]}

Se desideri stampare sia la chiave che il valore contemporaneamente, puoi utilizzare il for loop
.
for elem in "${!STAR_PLAYERS[@]}" do echo "key : ${elem}" -- "value: ${STAR_PLAYERS[${elem}]}" done

Lunghezza dell'array associativo
Puoi ottenere la lunghezza dell'array associativo, ovvero il numero totale di elementi presenti nell'array, anteponendo "#"
simbolo con l'array. Questo è comune anche per gli array indicizzati.
$ echo ${#STAR_PLAYERS[@]}

Verifica se l'elemento è presente nell'array
A volte prima di eseguire qualsiasi elaborazione con un particolare elemento, potresti voler controllare se l'elemento è già presente nell'array. Esistono molti modi per farlo, ma di seguito è riportato il modo più semplice.
Sto usando l'istruzione condizionale con -n
flag che verificherà se la lunghezza della stringa restituita da ${STAR_PLAYERS[Argentina]}
è diverso da zero. Espande la chiave data e il valore viene effettivamente confrontato con -n
bandiera.
if [[ -n "${STAR_PLAYERS[Argentina]}" ]] then echo "Element is present" else echo "Element not present" fi

Sola lettura array associativo
È possibile rendere di sola lettura un array associativo. In uno stato di sola lettura, una volta che l'array è stato inizializzato, non è possibile aggiungere nuovi elementi all'array o modificare i valori all'interno dell'array. Insieme alla declare
comando devi usare il -r
bandiera.
$ declare -r -A STAR_PLAYERS=( [Argentina]="Messi" [Brazil]="Neymar" [England]="Rooney" )
$ STAR_PLAYERS[Spain]="Ramos"
$ STAR_PLAYERS[England]="Sterling"
$ echo ${STAR_PLAYERS[@]}

Rimuovi elementi
Se desideri rimuovere un elemento particolare dall'array, puoi utilizzare unset
comando con il nome della chiave dell'elemento. Ad esempio, se desidero rimuovere l'elemento (Spain="Ramos"
), la sintassi dovrebbe essere la seguente.
$ unset STAR_PLAYERS[Spain]

Svuota un array
Puoi anche rimuovere tutti gli elementi dall'array e renderlo vuoto reinizializzando l'array come mostrato di seguito.
$ echo ${STAR_PLAYERS[@]}
$ declare -A STAR_PLAYERS=()

Rimuovi matrice
Se desideri rimuovere l'array, puoi utilizzare il nome dell'array senza chiavi.
$ unset STAR_PLAYERS

Conclusione
In questo articolo, abbiamo visto cosa sono gli array associativi in bash e alcune delle sue funzionalità. Lo svantaggio di bash è che devi scrivere un po' di logica manualmente o utilizzare strumenti esterni per ottenere il risultato desiderato. Ad esempio, quando devo convertire array associativo in oggetti json, devo usare jq strumento che non è integrato in bash. È qui che dovresti provare a usare Python che offre metodi facili da usare quando devi lavorare con array e altre strutture di dati.
Lettura correlata:
- Scripting Bash:spiegazione del ciclo While e Until con esempi
- Scripting di Bash:il ciclo For viene spiegato con esempi
- Scripting Bash:funzioni spiegate con esempi
- Scripting Bash:variabili spiegate con esempi
- Il reindirizzamento di Bash spiegato con esempi
- Comando Bash Echo spiegato con esempi in Linux
- Tutorial Bash Heredoc per principianti