Tentativa de falsificar uma matriz multidimensional 2D no bash, armazenando o nome da matriz como string

2

Estou tentando criar uma estrutura que me permita agrupar dados dentro de um array no bash

Veja o que tentei:

indexes=()
first_element=( value='one' another_value='two' yet_another_value='three')
indexes+=('first_element')

second_element=( value='four' another_value='five' yet_another_value='six')
indexes+=('second_element')

for i in "${indexes[@]}"
do
    # Here the i variable contains the name of the array I am supposed to loop through
    # but I cannot fugure out how to access that array using the stored string...
    for j in "${j[@]}"
    do
        #Here I am supposed to get the actually array
        echo "$j"
    done
done

Claro que não funciona ... Estou fazendo algo errado ou é impossível acessar as variáveis dessa maneira?

    
por Loupax 15.01.2014 / 12:43

1 resposta

1

Isso já foi respondido em SO: Como declarar matriz 2D no bash
Ao usar o bash, tenha em mente que é um script e não compila um idioma como C ou java, variáveis por referência ou ponteiro não são usados ou pelo menos não da mesma maneira

A resposta do SO sugere:

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

o exemplo acima cria uma matriz 4x5 com números aleatórios e imprime-a transposta, com o resultado do exemplo

          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

O princípio é: Criar um array associativo onde o índice é uma string como 3,4. Os benefícios:

é possível usar matrizes de qualquer dimensão;) como: 30,40,2 para 3 dimensões. a sintaxe está próxima de "C", como matrizes ${matrix[2,3]}

    
por 15.01.2014 / 13:20

Tags