Cosa sono i dizionari Bash su Linux e come li usi?

0
182
fatmawati achmad zaenuri/Shutterstock.com

I dizionari Bash forniscono mappe hash e array associativi negli script di shell di Linux. Ti mostreremo come utilizzare queste potenti e utili strutture di dati nei tuoi script di shell Linux.

A Rose by Any Other Nome

RELATEDChe cos'è la shell Bash e perché è così importante per Linux? Il nome formale per i dizionari è array associativo. Sono anche chiamate tabelle hash e mappe hash. Sono una struttura dati che funziona in modo simile a un array regolare, ma con una differenza significativa.

Un array è una raccolta di valori di dati contenuti in una struttura di dati. Per accedere a uno qualsiasi dei valori dei dati, noti come elementi dell'array, è necessario conoscere la loro posizione nell'array. La posizione di un elemento dell'array nell'array è nota come il suo indice, quindi questi tipi di array sono noti come array indicizzati. Sono il tipo di array più comunemente usato.

Tuttavia, hanno uno svantaggio. Come si accede a un elemento dell'array se non si conosce la sua posizione all'interno dell'elenco? Devi scorrere tutti gli elementi dell'array, verificando se il valore in quella posizione è quello che stai cercando.

Gli array associativi superano questo problema. Non utilizzano numeri interi per identificare in modo univoco gli elementi dell'array. Usano parole uniche note come parole chiave. È possibile recuperare il valore di un elemento dell'array utilizzando la sua parola chiave, indipendentemente da dove è posizionato all'interno dell'array. Con un array indicizzato, i numeri interi che rappresentano le posizioni all'interno dell'array sono in ordine crescente. Le parole chiave in un array associativo possono essere in qualsiasi ordine.

Puoi cercare un valore in un array associativo cercando con la sua parola chiave. Cercare una parola e recuperare il suo valore associato imita la ricerca di una parola in un dizionario e trovarne il significato. Ecco perché gli array associativi sono noti come dizionari.

Bash 4.0 o versione successiva

Gli array associativi sono supportati nella shell Bash versione 4.0 o successiva. Se stai utilizzando una distribuzione Linux corrente, dovresti essere a posto. Per controllare la tua versione di Bash, usa questo comando:

bash –version

Pubblicità

La macchina utilizzata per la ricerca di questo articolo ha installato Bash 5.1.4, quindi siamo a posto.

Principi di base

Per creare un array associativo sulla riga di comando del terminale o in uno script, usiamo il comando di dichiarazione Bash. L'opzione -A (associativa) dice a Bash che questo sarà un array associativo e non un array indicizzato.

dichiara gli acronimi -A

Questo crea un array associativo chiamato “acronimi.”

Per inserire alcuni dati nel nostro array, dobbiamo fornire parole chiave e valori. Possiamo farlo usando questo formato:

nome-array[key]=Valore

Aggiungiamo alcuni elementi dell'array:

acronimi[ACK]=acronimi di riconoscimento[BGP]=”Border Acronimi Gateway Protocol”[CIDR]=”Acronimi Classless Inter-Domain Routing”[DHCP]=”Acronimi Dynamic Host Configuration Protocol”[EOF]=”End of Frame”

Questi comandi definiscono cinque elementi dell'array. Si noti che i valori sono racchiusi tra virgolette se sono presenti spazi nel valore. Le nostre parole chiave sono state inserite in ordine alfabetico, ma possono essere inserite nell'ordine che preferisci. Le parole chiave devono essere univoche. Se provi a creare due voci con la stessa parola chiave, il secondo valore immesso sovrascriverà il primo. Avrai ancora solo una voce con quella parola chiave e sarà associata al secondo valore che hai aggiunto.

Per recuperare i valori dall'array, usiamo i comandi in questo formato:

${array-name[key]} Advertisement

Possiamo usare echo per inviare l'output alla finestra del terminale:

echo ${acronimi[ACK]} echo ${acronimi[DHCP]}

< h2 role="heading" aria-level="2">Uso di loop

Gli array si prestano molto bene ad essere utilizzati in loop. Gli array associativi non fanno eccezione. I cicli forniscono modi efficienti per richiamare una sequenza di azioni senza sezioni di codice ripetitive. Prima di esaminare i loop, c'è un modo efficiente per dichiarare gli array.

Creiamo gli array utilizzando il comando require (la stessa opzione -A di prima), ma forniamo le parole chiave e i valori come elenco sulla riga di comando.

dichiara -A paesi=( [ALB]=Albania [BHR]=Bahrain [CMR]=Camerun [DNK]=Danimarca [EGY]=Egitto )

Il nome dell'array è “paesi,” ed è collegato alla lista valori da un segno di uguale ” =.” L'elenco dei valori è racchiuso tra parentesi “()” e ogni parola chiave è racchiusa tra parentesi quadre “[]“. Nota che non ci sono virgole che separano i valori. Se hai una stringa di valori che contiene spazi, dovrai racchiuderla tra virgolette.

Per fare in modo che un array associativo restituisca una parola chiave invece del valore, aggiungi un punto esclamativo “!” davanti al nome dell'array. Il simbolo “@” può essere usato come carattere jolly, ovvero tutti gli elementi dell'array.

Questo ciclo for elencherà tutte le parole chiave:

for key in “${!countries[@]}”; fai echo $chiave; done

Nota che le parole chiave non sono necessariamente elencate nell'ordine che sono stati creati, ma non importa. Gli array associativi non si basano su un indice ordinato.

Pubblicità

Possiamo anche utilizzare l'espansione dei parametri per elencare tutte le parole chiave. Verranno elencati su una riga, non una per riga.

echo “${!paesi[@]}” echo “${!acronimi[@]}”

Possiamo aumentare il nostro ciclo for per stampare le parole chiave e i valori contemporaneamente.

for key in “${!acronimi[@]}”; do echo “$chiave – ${acronimi[$chiave]}”; fatto

Se vogliamo sapere quanti elementi ci sono negli array, possiamo usare un hash “#” davanti al nome dell'array invece di un punto esclamativo.

echo “${!paesi[@]}” echo “${!acronimi[@]}”

Verificare l'esistenza di un elemento dell'array

Se cerca una parola chiave ma non esiste un tale elemento dell'array, il valore restituito sarà una stringa vuota. A volte è utile avere un indicatore diverso per la presenza o l'assenza di un elemento dell'array.

Possiamo verificare la presenza di un elemento dell'array usando il tasto “+_” operatore. Nota che questo viene dopo la parola chiave, non davanti al nome dell'array come i precedenti operatori che abbiamo visto.

if [ ${acronyms[EOF]+_} ]; quindi echo “Trovato”; else echo “Non trovato”; fi if [ ${acronimi[FTP]+_} ]; quindi echo “Trovato”; else echo “Non trovato”; fi

L'elemento dell'array con la parola chiave “EOF” si trova nell'array, ma l'elemento dell'array con la parola chiave “FTP” non lo è.

Aggiunta di elementi di array

Aggiungere nuovi elementi a un array associativo è facile. A differenza di alcuni linguaggi di programmazione, non è necessario definire la dimensione del proprio array quando lo si dichiara. Puoi continuare ad aggiungere nuovi elementi senza raggiungere un limite superiore predefinito.

Annuncio

Per aggiungere un nuovo elemento all'array, usiamo il “+=” operatore.

paesi+=( [FJI]=Fiji ) echo “$(#paesi[@]}” echo ${paesi[FJI]}

Il numero di elementi nell'array ora è sei e la ricerca della nuova parola chiave trova l'elemento dell'array e ne restituisce il valore.

Rimozione di elementi di array e array

Il comando unset viene utilizzato per rimuovere elementi di array. Se la parola chiave contiene spazi, racchiuderla tra virgolette.

unset acronimi[EOF] if [ ${acronimi[EOF]+_} ]; quindi echo “Trovato”; else echo “Non trovato”; fi

Per rimuovere l'intero array, usa unset con il nome dell'array .

paesi non impostati

Uso delle variabili con gli array

L'utilizzo di variabili con array associativi è semplice. In questo esempio, imposteremo una chiave variabile sulla stringa “EOF.” Useremo la variabile quando aggiungiamo un nuovo elemento dell'array all'array. In realtà, stiamo sostituendo l'elemento dell'array che abbiamo eliminato in precedenza.

Recupereremo il nuovo elemento dell'array chiamandolo con la parola chiave new e anche utilizzando la variabile. Se la parola chiave contiene spazi, dovrai racchiudere il nome della variabile tra virgolette.

key=acronimi EOF[$key]=”End of Frame” echo ${acronyms[EOF]} echo ${ acronimi[$chiave]}

Diventa creativo

I nostri esempi sono state raccolte di informazioni in cui ogni elemento dell'array è indipendente da tutti gli altri, proprio come un dizionario. Ognuno è una definizione unica. Ma gli array associativi possono altrettanto facilmente contenere una varietà di informazioni tutte relative a una cosa, come le specifiche di diversi componenti hardware del computer:

dichiarare -A specifica della specifica[CPU] = “Dual Core AMD Ryzen 5 3600” specifica [Speed] = “3600 MHz” specifica [Kernel] = “5.11.0-17-generic x86_64” specifica [Mem] = “1978.5 MiB” specifica[Storage]=”32 GiB” specifica[Shell]=”Bash” echo ${specifica[CPU]}

Scrivere in modo efficiente in una lingua significa conoscere i meccanismi e le strutture che offre e selezionare quella più appropriata per il problema che si sta cercando di risolvere. Gli array associativi ti offrono un modo facile da usare di memorizzare dati che puoi cercare per nome, proprio come un dizionario.

LEGGI SUCCESSIVO

  • › “Materiale di Android” Il tema è fantastico, ma non aspettarti che Samsung lo usi
  • › Come creare una vista temporanea quando si collabora in Excel
  • › Come verificare la versione di .NET Framework su Windows 10
  • › Che cos'è la profondità del colore?
  • › Come controllare tutti i tuoi dispositivi Smart Home in un'unica app