Generando matriz 2D en Bash con dimensión desconocida

Generando matriz 2D en Bash con dimensión desconocida

Me pregunto si es posible generar una matriz 2D si no se conoce la dimensión antes de la entrada del usuario. Por ejemplo, si el usuario ingresa 2 2 en la línea de comando, ¿el Shell generará una matriz 2D basada en eso? gracias

Respuesta1

bashEs un lenguaje interpretado y no necesita saber cuánta memoria asignar de antemano.

Por lo tanto, es posible inicializar dinámicamente una nueva matriz sin haberla declarado o expandir una matriz ya declarada para agregar más entradas, sin embargo, no es posible utilizar matrices multidimensionales.

Sin embargo, esto puede ser falso: dado que no proporcionaste una tarea exacta para realizar, proporcionaré un bashejemplo de script que muestra cómo completar una m x ntabla definida por el usuario con números aleatorios (que en realidad no son aleatorios, ya que cada columna siempre tiene el mismo número en todas sus filas en cada ejecución, pero esto no es relevante para la pregunta) e imprímalo (simplificado deesteRespuesta de desbordamiento de pila):

#!/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

Respuesta2

Puede declarar una matriz 1D y leer todos los números en una matriz 1D en tiempo de ejecución. Después de conocer la dimensión, podría procesar la matriz 1D "como una matriz 2D".

Por ejemplo, supongamos que una matriz 1D contiene

[1, 5, 9, 11]

si realmente queremos

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

Como nuestra matriz es tal que el índice 0 es [1,5], entonces podrías hacer algo como esto para acceder a [1,5] (pos = 0)

pseudocódigo

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

para acceder a [9,11] (pos = 1)

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

Esperemos que esto tenga algún sentido. En realidad, una matriz 2D es una especie de matriz 1D.

información relacionada