Come la maggior parte dei linguaggi di programmazione, gli script bash a volte devono gestire un elenco di valori correlati. La forma più semplice è l'array standard.

In bash, la programmazione degli array è molto diversa, in particolare per quanto riguarda la sintassi. Anche gli array Bash sono rigorosamente unidimensionali, ma hanno ancora molti usi.

La sintassi di base degli array Bash

La creazione di un array in bash è semplice. Puoi inizializzare un intero array usando le parentesi, ad esempio:

città=(Londra Parigi Milano "New York")

(Puoi trovare tutto il codice di questo esempio di città in questo GitHub Gist.)

Questo crea un array contenente quattro elementi, indicizzati da 0 a 3. Si noti che il quarto valore è una stringa tra virgolette composta da due parole. Dovrai citare i valori che contengono spazi per chiarire che non sono valori separati.

Puoi accedere a un singolo elemento usando la sintassi delle parentesi comune a tutti i linguaggi di programmazione:

città[2]

Poiché questo è bash, avrai bisogno di un paio di perfezionamenti per utilizzare effettivamente il valore in un'espressione:

instagram viewer

  • Dovrai anteporre il simbolo del dollaro ($) al nome della variabile.
  • Dovrai anche usare le parentesi graffe ({}) per rendere univoco il nome della variabile. Per impostazione predefinita, bash tratterà $città[2] come variabile denominata città. Aggiungi parentesi graffe per dire a bash di valutare anche le parentesi e il numero di indice.

La sintassi standard di accesso all'array bash è quindi:

${nome_variabile[indice]}

Ecco un esempio completo:

#!/bin/bash

città=(Londra Parigi Milano "New York")
eco ${città[3]}

# New York

Invece di inizializzare un array tutto in una volta, puoi assegnarlo passo dopo passo. Questo script è un equivalente più lungo dell'esempio precedente:

#!/bin/bash

città[0]=Londra
città[1]=Parigi
città[2]=Milano
città[3]="New York"
eco ${città[3]}

# New York

Nota che, in entrambi i casi, devi fare attenzione a non aggiungere spazio attorno al segno di uguale. “city[0] = London”, con spazi intorno al segno di uguale, genererà un errore.

Altri usi per gli array Bash

Gli array sono perfetti per la memorizzazione di dati correlati. Ecco uno script di shell (molto limitato) per ottenere la radice quadrata di un numero:

#!/bin/bash

sqrt[1]=1
sqrt[4]=2
sqrt[9]=3
sqrt[16]=4
sqrt[25]=5

eco ${sqrt[$1]}

Si noti che lo script utilizza il valore $1 come indice di matrice. $1 rappresenta il primo argomento della riga di comando ricevuto dallo script, quindi puoi eseguire questo script in questo modo:

$ ./sqrt.sh 9
3

Potresti essere a conoscenza del $(cmd) sintassi per eseguire un comando e salvarne l'output in una variabile. Puoi combinarlo con la sintassi di inizializzazione dell'array per ottenere un array di file con cui lavorare:

arr=( $(ls) )

Un array è spesso una struttura dati perfetta per l'iterazione e Bash non fa eccezione. È possibile scorrere un array per stampare ogni elemento o eseguire un'operazione su ogni membro.

Puoi indirizzare un array in un per.. in ciclo continuo, per scorrere il suo contenuto. Ad esempio, ecco un semplice ciclo che stampa il numero di righe in ogni file nell'array arr:

per il file in "${arr[@]}"; fare
wc -l "$file"
fatto

# 3 ambienti
# 547 httpd.conf
# ...

Si noti che questo modello utilizza il @ simbolo per recuperare tutti gli elementi dall'array.

Più sintassi dell'array Bash

È possibile ottenere il numero di elementi in un array utilizzando quanto segue:

eco ${#città[@]}

# 4

Puoi aggiungere un nuovo elemento alla fine di un array standard in questo modo:

arr+=(4)

Quindi per aggiungere una quinta città all'elenco:

città+=(Roma)
eco ${città[@]}

# Londra Parigi Milano New York Roma

Per estrarre un pezzo di un array, puoi usare una sintassi che approssima l'operazione di slice di molti altri linguaggi:

${arr[@]:s: n}

Questa sintassi restituirà una fetta dell'array che inizia in posizione S e contenente n Oggetti. Puoi omettere il :n parte da cui estrarre tutti gli elementi S fino alla fine della lista.

eco ${città[@]:2:2}
# Milano New York

eco ${città[@]:3}
# New York Roma

Bash ha molte caratteristiche, richiedono solo un po' di apprendimento

Gli array in bash possono avere dei limiti, ma offrono le stesse funzionalità di base della maggior parte dei linguaggi di programmazione. Sebbene bash abbia storicamente supportato solo semplici array unidimensionali, i tempi stanno cambiando. L'ultima versione di bash, 4, supporta gli array associativi e l'indicizzazione negativa degli array.

Qualunque sia la versione di bash che stai utilizzando, è importante comprenderne le sfumature. Anche la normale sintassi delle variabili ha molte idiosincrasie.

Spiegazione delle variabili Bash: una semplice guida con esempi

Leggi Avanti

CondividereTwittaCondividereE-mail

Argomenti correlati

  • Programmazione
  • Linux
  • Programmazione
  • Linux Bash Shell
  • Sceneggiatura

Circa l'autore

Bobby Jack (71 articoli pubblicati)

Bobby è un appassionato di tecnologia che ha lavorato come sviluppatore di software per quasi due decenni. Al MUO è Junior Editor per la sezione Programmazione. È appassionato di giochi, lavora come redattore capo presso Switch Player Magazine ed è immerso in tutti gli aspetti dell'editoria online e dello sviluppo web.

Altro da Bobby Jack

Iscriviti alla nostra Newsletter

Iscriviti alla nostra newsletter per suggerimenti tecnici, recensioni, ebook gratuiti e offerte esclusive!

Clicca qui per iscriverti