Gerando array 2D no Bash com dimensão desconhecida

Gerando array 2D no Bash com dimensão desconhecida

apenas me perguntando se é possível gerar uma matriz 2D se a dimensão não for conhecida antes da entrada do usuário. Por exemplo, se o usuário inserir 2 2 na linha de comando, o shell irá gerar um array 2D com base nisso? obrigado

Responder1

bashé uma linguagem interpretada e não precisa saber antecipadamente quanta memória deve ser alocada.

Portanto é possível inicializar dinamicamente um novo array sem tê-lo declarado ou expandir um array já declarado para adicionar mais entradas, porém não é possível usar arrays multidimensionais.

No entanto, isso pode ser falsificado: como você não forneceu uma tarefa exata para realizar, fornecerei um bashexemplo de script que mostra como preencher uma m x ntabela definida pelo usuário com números aleatórios (que não são realmente aleatórios, pois cada coluna será sempre terá o mesmo número em todas as suas linhas em cada execução, mas isso não é relevante para a questão) e imprima-o (simplificado deesseResposta do estouro de pilha):

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

Responder2

Você poderia declarar um array 1D e ler todos os números em um array 1D em tempo de execução. Depois de conhecer a dimensão, você poderá processar o array 1D "como um array 2D".

Por exemplo, suponha que o array 1D contenha

[1, 5, 9, 11]

Se realmente quisermos

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

como nosso array é tal que o índice 0 é [1,5], então você poderia fazer algo assim para acessar [1,5] (pos = 0)

pseudo-código

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

para acessar [9,11] (pos = 1)

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

Espero que isso faça algum sentido. Na verdade, um array 2D é uma espécie de array 1D.

informação relacionada