Vous pouvez les simuler par exemple avec des hachages, mais vous devez faire attention aux zéros non significatifs et à bien d'autres choses. La démonstration suivante fonctionne, mais elle est loin d'être la solution optimale.
#!/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'exemple ci-dessus crée une matrice 4x5 avec des nombres aléatoires et l'imprime transposée, avec le résultat de l'exemple
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
Le principe est :Créer un tableau associatif où l'index est une chaîne comme 3,4
. Les avantages :
- il est possible de l'utiliser pour des tableaux de n'importe quelle dimension;) comme :
30,40,2
pour 3 dimensions. - la syntaxe est proche de "C" comme les tableaux
${matrix[2,3]}
Bash n'a pas de tableau multidimensionnel. Mais vous pouvez simuler un effet quelque peu similaire avec des tableaux associatifs. Voici un exemple de tableau associatif prétendant être utilisé comme tableau multidimensionnel :
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
Si vous ne déclarez pas le tableau comme associatif (avec -A
), ce qui précède ne fonctionnera pas. Par exemple, si vous omettez le declare -A arr
ligne, le echo
imprimera 2 3
au lieu de 0 1
, car 0,0
, 1,0
et tel sera pris comme expression arithmétique et évalué à 0
(la valeur à droite de l'opérateur virgule).