Comprensione degli array associativi in ​​Linux Bash con esempi

Comprensione degli array associativi in ​​Linux Bash con esempi
Gli array associativi sono un tipo di dati astratto che può essere considerato come dizionari o mappe. Il modo in cui differiscono da altri array è che tengono le coppie di valore chiave in cui le chiavi possono essere arbitrarie e definite da stringhe anziché i soliti numeri di indice. Gli array associati hanno due proprietà principali:
  • Ogni chiave nell'array può apparire solo una volta. Puoi pensarlo come un ID univoco per un utente in un elenco.
  • Un valore può apparire più di una volta in un array. Ad esempio, due persone in un elenco possono avere lo stesso nome ma devono avere ID utente diversi.

In questo articolo, spiegheremo come puoi dichiarare e inizializzare gli array associativi in ​​Linux Bash. Elaboreremo ulteriormente il potere degli array associativi con l'aiuto di vari esempi.

Abbiamo eseguito gli esempi menzionati in questo articolo su un sistema Debian 10 Buster. Tuttavia, puoi replicare facilmente su quasi tutte le distro Linux.

Verificare i prerequisiti

Per l'uso di array associativi su Linux Bash, la versione GNU Bash deve essere uguale o superiore alla versione 4. Apri il tuo terminale Linux accedendolo tramite la ricerca del lancio dell'applicazione. Quindi immettere il seguente comando per controllare la versione installata di Bash:

$ Bash -Vversion

La mia attuale versione bash è 5.0.3 Quindi sono a posto. Nel caso in cui la tua versione bash sia inferiore a 4, è possibile aggiornare bash eseguendo il seguente comando come sudo:

$ sudo apt-get install-Solo aggiornamento bash

Dichiarare un array associativo e inizializzarlo

Dichiarare un array associativo è piuttosto semplice in Bash e può essere fatto tramite il comando Dichiara:

$ Dichiara -a "ArrayName"

Nel nostro esempio, dichiarare una variabile di array denominata Samplearray1 come segue:

$ dichiara -a samplearray1

Il prossimo passo è inizializzare i valori richiesti per il tuo array. Nel nostro esempio, vogliamo avere un array in cui i valori sono alcuni nomi di paesi e le chiavi sono le loro abbreviazioni del nome del paese pertinenti. Qui alimeremo i valori dell'array, uno per uno come segue:

$ ArrayName [Key] = Value

Esempio:

$ samplearray1 [chn] = China
$ samplearray1 [jpn] = Giappone
$ samplearray1 [kor] = Corea
$ samplearray1 [twn] = taiwan
$ samplearray1 [th] = Thailandia

Una rapida alternativa è dichiarare e inizializzare un array in un singolo comando bash come segue:

$ dichiara -a arrayName = ([key1] = value1 [key2] = value2 [key3] = value3 .. . )

Ecco come possiamo dichiarare e inizializzare il nostro array menzionato, in alternativa, come segue:

$ dichiara -a samplearray1 = ([chn] = China [jpn] = Giappone [Kor] = Corea [TWN] = Taiwan
[Th] = Thailandia)

Ora presenteremo alcuni esempi che elaboreranno ciò che puoi fare con gli array associativi in ​​Bash:

Esempio1: accedere ai tasti e ai valori dell'array

In questo esempio spiegheremo come puoi:

  • Stampa un valore contro una chiave
  • Stampa tutte le chiavi dell'array contemporaneamente
  • Stampa tutti i valori di array contemporaneamente

E,

  • Stampa tutte le coppie di valore chiave contemporaneamente

Stampa

Puoi Stampa un valore contro una chiave Usando la seguente sintassi del comando:

$ echo $ arrayname [keyname]

Ecco come possiamo accedere al nome completo di un paese fornendo l'abbreviazione del nome del paese, dal nostro Samplearray1:

$ echo $ samplearray1 [chn]
$ echo $ samplearray1 [twn]

Se sei interessato a Stampa di tutte le chiavi Del tuo array associativo, puoi farlo usando la seguente sintassi:

$ per la chiave in "$ !ArrayName [@] "; do echo $ key; fatto

Il seguente comando stamperà tutte le abbreviazioni del nome del paese dal mio samplearray1

Usando un ciclo per:

$ per la chiave in "$ !samplearray1 [@] "; do echo $ key; fatto

Un'altra alternativa alla stampa di tutte le chiavi dall'array è usando l'espansione dei parametri. Il comando seguente stamperà tutti i tasti nella stessa riga:

$ echo "$ !samplearray1 [@] "

Se sei interessato a Stampa tutti i valori dell'array contemporaneamente, Puoi farlo usando il loop come segue:

$ per val in "$ Arrayname [@]"; Echo $ val; Fatto

Il seguente comando stamperà tutti i nomi di paesi completi archiviati nel mio samplearray1:

$ per val in "$ samplearray1 [@]"; Echo $ val; Fatto

Un'altra alternativa alla stampa di tutti i valori dall'array è utilizzando l'espansione dei parametri. Il comando seguente stamperà tutti i valori nella stessa riga:

$ echo "$ samplearray1 [@]"

Il prossimo esempio utile lo farà Stampa tutte le coppie di valore chiave immediatamente usando il loop come segue:

$ per la chiave in "$ !samplearray1 [@] "; do echo" $ key è un'abbreviazione per
$ samplearray1 [$ key] ";

Ovviamente puoi rendere questo recupero di informazioni più utile nei tuoi script di Bash complessi e significativi.

Esempio 2: elementi dell'array di conteggio

Il comando seguente può essere utilizzato per contare e stampare il numero di elementi nell'array associativo:

$ echo "$ #ArrayName [@]"

L'output del seguente comando mostra che ho cinque elementi nel mio samplearray1:

$ echo "$ #samplearray1 [@]"

Esempio 3: aggiunta di nuovi dati in array

Se si desidera aggiungere un elemento a un array dopo aver già dichiarato e inizializzato, questa è la sintassi che puoi seguire:

$ ArrayName+= ([key] = value)

Nel mio esempio, voglio aggiungere un altro paese insieme all'abbreviazione del nome della sua contea, quindi userò il seguente comando:

$ samplearray1+= ([al] = Alabama)

Facendo eco ai valori dell'array ora suggerisce che il nuovo paese venga aggiunto al mio array:

$ echo "$ samplearray1 [@]"

Esempio 4: eliminazione dell'elemento dall'array

Inscindendo una voce dall'array associativo, è possibile eliminarla come elemento dell'array. Questo è l'uso della sintassi non set può utilizzare per farlo:

$ Unset ArrayName [Key]

Nel mio esempio, voglio rimuovere la coppia di valore chiave "al-Alabama" dal mio array in modo da sconfiggere il tasto "AL" nel mio comando:

$ unset samplearray1 [al]

Facendo eco ai valori dell'array ora suggerisce che il valore chiave di al-Alabama viene ora rimosso dal mio array:

$ echo "$ samplearray1 [@]"

Esempio 5: verifica se esiste un elemento nell'array

Usando la condizione IF nel modo seguente, è possibile verificare se un articolo è disponibile nell'array associativo o ora:

$ if [$ ArrayName [SearchKey]+_]; Quindi eco "esiste"; else eco "non disponibile"; fi

Ad esempio, se controllo se esiste l'articolo di Al-Alabama recentemente cancellato, il seguente messaggio verrà stampato:

$ if [$ samplearray1 [al]+_]; Quindi eco "esiste"; else eco "non disponibile"; fi

Se controllo un articolo esistente, verrà stampato il seguente risultato:

$ if [$ samplearray1 [jpn]+_]; Quindi eco "esiste"; else eco "non disponibile"; fi

Esempio 6: Eliminazione di un array

È possibile eliminare un array associativo dalla tua memoria bash usando il comando unset come segue:

$ Unset ArrayName

Usando il seguente semplice comando, eliminerò il mio samplearray1 dalla memoria:

$ Unset Samplearray1

Ora, quando provo a stampare tutti i valori dell'array tramite il comando seguente, non ne ottengo nessuno.

$ echo "$ samplearray1 [@]"

Usando questi esempi negli script di Bash Linux, è possibile utilizzare la potenza degli array associativi per ottenere una soluzione a molti problemi complessi.