GNU/Linux >> Linux Esercitazione >  >> Linux

Matrici Bash

Gli array sono una delle strutture dati più utilizzate e fondamentali. Puoi pensare che un array sia una variabile che può memorizzare più variabili al suo interno.

In questo articolo tratteremo gli array Bash e spiegheremo come usarli nei tuoi script Bash.

Matrici Bash #

Bash supporta i tipi di array associativi e indicizzati numericamente unidimensionali. Gli array numerici sono referenziati usando numeri interi e quelli associativi usando stringhe.

È possibile accedere agli array indicizzati numericamente dall'estremità utilizzando indici negativi, l'indice di -1 fa riferimento all'ultimo elemento. Gli indici non devono essere contigui.

A differenza della maggior parte dei linguaggi di programmazione, gli elementi dell'array Bash non devono essere dello stesso tipo di dati. Puoi creare un array che contenga sia stringhe che numeri.

Bash non supporta gli array multidimensionali e non puoi avere elementi di array che siano anche array.

Non c'è limite al numero massimo di elementi che possono essere archiviati in un array.

Creazione di array Bash #

Gli array in Bash possono essere inizializzati in diversi modi.

Creazione di array indicizzati numericamente #

Le variabili Bash non sono tipizzate, qualsiasi variabile può essere utilizzata come array indicizzato senza dichiararlo.

Per dichiarare in modo esplicito un array, usa l'incorporato dichiara:

declare -a array_name

Un modo per creare una matrice indicizzata consiste nell'usare il seguente modulo:

array_name[index_1]=value_1
array_name[index_2]=value_2
array_name[index_n]=value_n

Dove index_* è un numero intero positivo.

Un altro modo per creare un array numerico è specificare l'elenco degli elementi tra parentesi, separati da uno spazio vuoto:

array_name=( element_1 element_2 element_N )

Quando l'array viene creato utilizzando il modulo sopra, l'indicizzazione inizia da zero, ovvero il primo elemento ha un indice di 0 .

Creazione di array associativi #

A differenza dell'indicizzazione numerica, gli array associativi devono essere dichiarati prima di poter essere utilizzati.

Per dichiarare un array associativo usa declare integrato con -A opzione (maiuscolo):

declare -A array_name

Gli array associativi possono essere creati utilizzando il seguente modulo:

declare -A array_name

array_name[index_foo]=value_foo
array_name[index_bar]=value_bar
array_name[index_xyz]=value_xyz

Dove index_* può essere qualsiasi stringa.

Puoi anche creare un array associativo utilizzando il modulo seguente:

declare -A array_name

array_name=( 
  [index_foo]=value_foo 
  [index_bar]=value_bar 
  [index_xyz]=value_xyz 
)

Operazioni array #

La sintassi degli array Bash può sembrare un po' strana all'inizio, ma avrà più senso dopo aver letto questo articolo.

Elementi di riferimento #

Per fare riferimento a un singolo elemento, devi conoscere l'indice dell'elemento.

È possibile fare riferimento a qualsiasi elemento utilizzando la seguente sintassi:

${array_name[index]}
La sintassi per l'accesso a un elemento dell'array è simile alla sintassi della maggior parte dei linguaggi di programmazione. Le parentesi graffe ${} sono necessari per evitare gli operatori di espansione del nome file della shell.

Stampiamo l'elemento con indice 1 :

## declare the array
declare -a my_array=( "Hydrogen" "Helium" "Lithium" "Beryllium" )

## print element
echo ${my_array[1]}
Helium

Se usi @ o * come indice, la parola si espande a tutti i membri dell'array. Per stampare tutti gli elementi useresti:

## declare the array
declare -a my_array=( "Hydrogen" "Helium" "Lithium" "Beryllium" )

## print all elements
echo "${my_array[@]}"
Hydrogen Helium Lithium Beryllium

L'unica differenza tra @ e * è quando il modulo ${my_array[x]} è racchiuso tra virgolette. In questo caso, * si espande in una singola parola in cui gli elementi dell'array sono separati da uno spazio. @ espande ogni elemento dell'array in una parola separata. Ciò è particolarmente importante quando si utilizza il modulo per analfabeti attraverso gli elementi dell'array.

Per stampare le chiavi dell'array aggiungere il ! operatore prima del nome dell'array:

${!array_name[index]}

Ecco un esempio:

## declare the array
declare -a my_array=( "Hydrogen" "Helium" "Lithium" "Beryllium" )

## print all elements
echo "${!my_array[@]}"
0 1 2 3

Lunghezza array #

Per ottenere la lunghezza di un array, utilizza il seguente modulo:

${#array_name[@]}
La sintassi è la stessa di quando si fa riferimento a tutti gli elementi con l'aggiunta del # carattere prima del nome dell'array.
## declare the array
declare -a my_array=( "Hydrogen" "Helium" "Lithium" "Beryllium" )

## array Length
echo ${#my_array[@]}
4

Esegui il ciclo dell'array #

Il modo più comune per eseguire l'iterazione su ogni elemento in una matrice è utilizzare il ciclo for:

declare -a my_array=( "Hydrogen" "Helium" "Lithium" "Beryllium" )

## Array Loop
for i in "${my_array[@]}"
do 
  echo "$i"
done

Il codice sopra eseguirà un'iterazione sull'array e stamperà ogni elemento in una nuova riga:

Hydrogen
Helium
Lithium
Beryllium

Ecco un esempio di come stampare tutte le chiavi ei valori:

declare -a my_array=( "Hydrogen" "Helium" "Lithium" "Beryllium" )

## Array Loop
for i in "${!my_array[@]}"
do
  echo "$i" "${my_array[$i]}"
done
0 Hydrogen
1 Helium
2 Lithium
3 Beryllium

Un altro modo per scorrere un array è ottenere la lunghezza dell'array e utilizzare lo C style ciclo:

declare -a my_array=( "Hydrogen" "Helium" "Lithium" "Beryllium" )

# Length of the array
length=${#my_array[@]}

# Array Loop
for (( i=0; i < ${length}; i++ ))
do
  echo $i ${my_array[$i]}
done
0 Hydrogen
1 Helium
2 Lithium
3 Beryllium

Aggiungi un nuovo elemento #

Per aggiungere un nuovo elemento a un array bash e specificarne l'indice, utilizzare il seguente modulo:

my_array[index_n]="New Element"

Ecco un esempio:

declare -a my_array=( "Hydrogen" "Helium" "Lithium" "Beryllium" )

## add new element
my_array[9]="Aluminum"

## print all elements
echo "${my_array[@]}"
Hydrogen Helium Lithium Beryllium Aluminum

Un altro modo per aggiungere un nuovo elemento a un array senza specificare l'indice è usare += operatore. Puoi aggiungere uno o più elementi:

declare -a my_array=( "Hydrogen" "Helium" "Lithium" "Beryllium" )

## add new elements
my_array+=( Cobalt Nickel )

## print all elements
echo "${my_array[@]}"
Hydrogen Helium Lithium Beryllium Cobalt Nickel

Elimina un elemento #

Per eliminare un singolo elemento, devi conoscere l'indice dell'elemento. Un elemento può essere rimosso usando unset comando:

unset my_array[index]

Vediamo un esempio:

declare -a my_array=( "Hydrogen" "Helium" "Lithium" "Beryllium" )

## remove element
unset my_array[2]

## print all elements
echo "${my_array[@]}"
Hydrogen Helium Beryllium

Conclusione #

Abbiamo spiegato come creare array indicizzati numericamente e associativi. Abbiamo anche mostrato come scorrere gli array, calcolare la lunghezza dell'array e aggiungere e rimuovere elementi.

Se hai domande o feedback, sentiti libero di lasciare un commento.


Linux
  1. Come creare una matrice di elementi unici da una stringa/array in Bash?

  2. Parentesi singola nell'assegnazione delle variabili Bash?

  3. Bash array di array?

  4. Ottieni tutti i file tranne i file nell'array - Bash?

  5. Gli array AWK spiegati con 5 esempi pratici

Bash Shebang

Matrice associativa in Bash

Bash Scripting – Array associativo spiegato con esempi

Bash Beginner Series #4:Utilizzo di array in Bash

Array in Bash non trovato

Comportamento degli array nello scripting bash e nella shell zsh (Start Index 0 o 1?)