Array in Bash

Introduzione al Bash Scripting

Alex Scriven

Data Scientist

Cos'è un array?

Due tipi di array in Bash:

  • Un array
    • Struttura “normale” indicizzata numericamente.
    • Chiamato “list” in Python o “vector” in R.

In Python: my_list = [1,3,2,4]

In R: my_vector <- c(1,3,2,4)

Introduzione al Bash Scripting

Creare un array in Bash

La creazione di un array indicizzato numericamente si può fare in due modi in Bash.

  1. Dichiara senza aggiungere elementi
declare -a my_first_array
  1. Crea e aggiungi elementi insieme
my_first_array=(1 2 3)

Ricorda: niente spazi intorno all'uguale!

Introduzione al Bash Scripting

Attenzione alle virgole!

In Bash non si usano le virgole per separare gli elementi:

Questo NON è corretto:

my_first_array=(1, 2, 3)

Questo è corretto:

my_first_array=(1 2 3)
Introduzione al Bash Scripting

Proprietà importanti degli array

  • Tutti gli elementi si restituiscono con array[@]. Nota: in Bash servono le parentesi graffe intorno al nome quando accedi a queste proprietà.
my_array=(1 3 5 2)
echo ${my_array[@]}
1 3 5 2
  • La lunghezza di un array si ottiene con #array[@]
echo ${#my_array[@]}
4
Introduzione al Bash Scripting

Manipolare gli elementi di un array

Accedi agli elementi con le parentesi quadre.

my_first_array=(15 20 300 42)
echo ${my_first_array[2]}
300
  • Ricorda: Bash usa l'indicizzazione da zero, come Python (ma non R!).
Introduzione al Bash Scripting

Manipolare gli elementi di un array

Imposta gli elementi con la notazione a indice.

my_first_array=(15 20 300 42 23 2 4 33 54 67 66)

my_first_array[0]=999
echo ${my_first_array[0]}
999
  • Ricorda: non usare $ quando sovrascrivi un indice, tipo $my_first_array[0]=999, non funziona.
Introduzione al Bash Scripting

Manipolare gli elementi di un array

Usa la notazione array[@]:N:M per estrarre una "fetta" dell'array.

  • N è l'indice iniziale, M quanti elementi restituire.
my_first_array=(15 20 300 42 23 2 4 33 54 67 66)
echo ${my_first_array[@]:3:2}
42 23
Introduzione al Bash Scripting

Aggiungere a un array

Aggiungi a un array con array+=(elements).

Per esempio:

my_array=(300 42 23 2 4 33 54 67 66)

my_array+=(10) echo ${my_array[@]}
300 42 23 2 4 33 54 67 66 10
Introduzione al Bash Scripting

(Non) aggiungere a un array

Cosa succede se non metti le parentesi tonde intorno a ciò che vuoi aggiungere? Vediamo.

Per esempio:

my_array=(300 42 23 2 4 33 54 67 66)
my_array+=10
echo ${my_array[@]}
30010 42 23 2 4 33 54 67 66

La stringa 10 viene solo concatenata al primo elemento. Non è ciò che vogliamo!

Introduzione al Bash Scripting

Array associativi

  • Un array associativo
    • Simile a un array normale, ma con coppie chiave-valore, non indici numerici
    • Simile al dizionario di Python o alla lista di R
    • Nota: disponibile solo da Bash 4 in poi. Alcuni Mac moderni hanno Bash vecchio! Controlla con bash --version nel terminale

In Python:

my_dict = {'city_name': "New York", 'population': 14000000}

In R:

my_list = list(city_name = c('New York'), population = c(14000000))
Introduzione al Bash Scripting

Creare un array associativo

Puoi creare un array associativo solo con declare (e -A maiuscola).

Puoi dichiarare prima e poi aggiungere elementi, o fare tutto su una riga.

  • Metti le 'chiavi' tra parentesi quadre, poi associa un valore dopo l'uguale.
    • Puoi aggiungere più elementi insieme.
Introduzione al Bash Scripting

Esempio di array associativo

Creiamo un array associativo:

declare -A city_details # Prima dichiara

city_details=([city_name]="New York" [population]=14000000) # Aggiungi elementi
echo ${city_details[city_name]} # Indicizza con la chiave per ottenere il valore
New York
Introduzione al Bash Scripting

Creare un array associativo

In alternativa, crea e assegna un array associativo in una riga

  • Il resto è uguale
declare -A city_details=([city_name]="New York" [population]=14000000)

Accedi alle 'chiavi' di un array associativo con !

echo ${!city_details[@]} # Restituisci tutte le chiavi
city_name population
Introduzione al Bash Scripting

Passons à la pratique !

Introduzione al Bash Scripting

Preparing Video For Download...