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,2per 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).