GNU/Linux >> Tutoriels Linux >  >> Linux

Comment déclarer un tableau 2D dans bash

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).


Linux
  1. Comment utiliser les commandes d'historique de Bash

  2. Comment écrire une boucle dans Bash

  3. Comment déboguer un script bash ?

  4. Comment créer un tableau d'éléments uniques à partir d'une chaîne/tableau dans Bash ?

  5. comment décaler la valeur du tableau dans bash

Comment comparer des chaînes dans Bash

Tableaux bash

Tableau associatif dans Bash

Script bash :comment lire des données à partir de fichiers texte

Comment utiliser la commande Declare dans Linux Bash Shell

Comment exécuter un script bash