GNU/Linux >> Linux Esercitazione >  >> Linux

Bash Scripting – Array associativo spiegato con esempi

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

Linux
  1. Come scrivere uno script Bash con esempi

  2. Matrici Bash con esempi

  3. Bash Istruzione If-Else con esempi

  4. Gli array AWK spiegati con 5 esempi pratici

  5. Il tutorial Ultimate Bash Array con 15 esempi

Scripting Bash – Spiegazione del comando Printf con esempi

Bash Scripting – Array indicizzato spiegato con esempi

Il comando Tr in Linux spiegato con esempi

Bash Scripting Part2 – Cicli For e While con esempi

Bash Scripting Introduzione Tutorial con 5 esempi pratici

Script Bash per Loop spiegato con esempi