2 votes

Générer un tableau 2D dans Bash avec une dimension inconnue

Je me demande juste s'il est possible de générer un tableau 2D si la dimension n'est pas connue avant la saisie de l'utilisateur. Par exemple, si l'utilisateur saisit 2 2 sur la ligne de commande, le Shell génèrera un tableau 2D sur cette base ?

2voto

ieplugin Points 216

bash est un langage interprété, et il n'a pas besoin de connaître à l'avance la quantité de mémoire à allouer.

Il est donc possible d'initialiser de façon dynamique un nouveau tableau sans l'avoir déclaré ou d'étendre un tableau déjà déclaré pour ajouter des entrées supplémentaires, mais il n'est pas possible d'utiliser des tableaux multidimensionnels.

Cependant, cela peut être truqué : puisque vous n'avez pas fourni une tâche exacte à accomplir, je vais fournir une bash script qui montre comment remplir un formulaire défini par l'utilisateur. m x n avec des nombres aléatoires (qui ne sont pas vraiment aléatoires, puisque chaque colonne aura toujours le même nombre sur toutes ses lignes à chaque passage, mais ce n'est pas pertinent pour la question) et l'imprimer (simplifié à partir de este Réponse de Stack Overflow) :

#!/bin/bash

declare -a array
read -p 'm: ' m
read -p 'n: ' n
for ((i=0; i<m; i++))
do
    for ((j=0; j<n; j++))
    do
        a[${i},${j}]=$RANDOM
    done
done
for ((i=0; i<m; i++))
do
    for ((j=0; j<n; j++))
    do
        echo -ne "${a[${i},${j}]}\t"
    done
    echo
done

1voto

nathanesau Points 127

Vous pourriez déclarer un tableau 1D et lire tous les nombres dans un tableau 1D au moment de l'exécution. Une fois la dimension connue, vous pouvez traiter le tableau 1D "comme un tableau 2D".

Par exemple, supposons que le tableau 1D contient

[1, 5, 9, 11]

Si nous voulons vraiment

[[1,5], [9,11]]

en tant que tableau de telle sorte que l'indice 0 soit [1,5], vous pourriez faire quelque chose comme ceci pour accéder à [1,5] (pos = 0)

pseudo-code

for i in 0:(pos*dim + dim-1)  
    echo arr[i]

pour accéder à [9,11] (pos = 1)

for i in pos*dim:(pos*dim + dim - 1)
    echo arr[i]

J'espère que cela a un sens. En réalité, un tableau 2D est en quelque sorte un tableau 1D.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X