GNU/Linux >> Tutoriales Linux >  >> Linux

Cómo declarar una matriz 2D en bash

Puede simularlos, por ejemplo, con hashes, pero debe preocuparse por los ceros iniciales y muchas otras cosas. La próxima demostración funciona, pero está lejos de ser una solución óptima.

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

el ejemplo anterior crea una matriz de 4x5 con números aleatorios y la imprime transpuesta, con el resultado del ejemplo

           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

El principio es:Crear una matriz asociativa donde el índice es una cadena como 3,4 . Los beneficios:

  • es posible usarlo para matrices de cualquier dimensión;) como:30,40,2 para 3 dimensiones.
  • la sintaxis está cerca de "C" como matrices ${matrix[2,3]}

Bash no tiene una matriz multidimensional. Pero puede simular un efecto algo similar con matrices asociativas. El siguiente es un ejemplo de matriz asociativa que pretende ser utilizada como matriz multidimensional:

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 no declara la matriz como asociativa (con -A ), lo anterior no funcionará. Por ejemplo, si omite el declare -A arr línea, el echo imprimirá 2 3 en lugar de 0 1 , porque 0,0 , 1,0 y tal se tomará como expresión aritmética y se evaluará a 0 (el valor a la derecha del operador de coma).


Linux
  1. Cómo usar los comandos del historial de Bash

  2. ¿Cómo depurar un script Bash?

  3. ¿Cómo crear una matriz de elementos únicos a partir de una cadena/matriz en Bash?

  4. ¿Cómo detectar Bash> =4.0?

  5. cómo cambiar el valor de la matriz en bash

Cómo comparar cadenas en Bash

Arreglos bash

Matriz asociativa en Bash

Bash scripting:cómo leer datos de archivos de texto

Cómo usar el comando Declare en Linux Bash Shell

Cómo ejecutar un script Bash