GNU/Linux >> Linux Esercitazione >  >> Linux

Come dichiarare un array 2D in bash

Puoi simularli ad esempio con gli hash, ma devi fare attenzione agli zeri iniziali e molte altre cose. La prossima dimostrazione funziona, ma è tutt'altro che una soluzione ottimale.

#!/bin/bash
declare -A matrix
num_rows=4
num_columns=5

for ((i=1;i<=num_rows;i++)) do
    for ((j=1;j<=num_columns;j++)) do
        matrix[$i,$j]=$RANDOM
    done
done

f1="%$((${#num_rows}+1))s"
f2=" %9s"

printf "$f1" ''
for ((i=1;i<=num_rows;i++)) do
    printf "$f2" $i
done
echo

for ((j=1;j<=num_columns;j++)) do
    printf "$f1" $j
    for ((i=1;i<=num_rows;i++)) do
        printf "$f2" ${matrix[$i,$j]}
    done
    echo
done

l'esempio precedente crea una matrice 4x5 con numeri casuali e la stampa trasposta, con il risultato dell'esempio

           1         2         3         4
 1     18006     31193     16110     23297
 2     26229     19869      1140     19837
 3      8192      2181     25512      2318
 4      3269     25516     18701      7977
 5     31775     17358      4468     30345

Il principio è:creare un array associativo in cui l'indice è una stringa come 3,4 . I vantaggi:

  • è possibile utilizzare per array di qualsiasi dimensione;) come:30,40,2 per 3 dimensionale.
  • la sintassi è vicina alla "C" come gli array ${matrix[2,3]}

Bash non ha un array multidimensionale. Ma puoi simulare un effetto in qualche modo simile con gli array associativi. Quello che segue è un esempio di array associativo che finge di essere usato come array multidimensionale:

declare -A arr
arr[0,0]=0
arr[0,1]=1
arr[1,0]=2
arr[1,1]=3
echo "${arr[0,0]} ${arr[0,1]}" # will print 0 1

Se non dichiari l'array come associativo (con -A ), quanto sopra non funzionerà. Ad esempio, se ometti declare -A arr riga, il echo stamperà 2 3 invece di 0 1 , perché 0,0 , 1,0 e tale sarà presa come espressione aritmetica e valutata a 0 (il valore a destra dell'operatore virgola).


Linux
  1. Come usare i comandi della cronologia di Bash

  2. Come scrivere un ciclo in Bash

  3. Scopri la gestione degli errori di Bash con l'esempio

  4. Come eseguire il debug di uno script Bash?

  5. Come posso ottenere valori univoci da un array in Bash?

Come confrontare le stringhe in Bash

Matrici Bash

Matrice associativa in Bash

Scripting Bash:come leggere i dati dai file di testo

Come utilizzare il comando Declare in Linux Bash Shell

Come eseguire uno script Bash