GNU/Linux >> Znalost Linux >  >> Linux

Jak deklarovat 2D pole v bash

Můžete je simulovat například pomocí hashe, ale je třeba si dát pozor na úvodní nuly a mnoho dalších věcí. Další ukázka funguje, ale má k optimálnímu řešení daleko.

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

výše uvedený příklad vytvoří matici 4x5 s náhodnými čísly a vytiskne ji transponovanou s výsledkem příkladu

           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

Princip je následující:Vytvoření jednoho asociativního pole, kde index je řetězec jako 3,4 . Výhody:

  • je možné použít pro pole libovolné dimenze;) jako:30,40,2 pro 3 rozměr.
  • syntaxe je blízká "C" jako pole ${matrix[2,3]}

Bash nemá vícerozměrné pole. Poněkud podobný efekt ale můžete simulovat pomocí asociativních polí. Následuje příklad asociativního pole, které předstírá, že se používá jako vícerozměrné pole:

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

Pokud nedeklarujete pole jako asociativní (s -A ), výše uvedené nebude fungovat. Pokud například vynecháte declare -A arr řádek echo vytiskne 2 3 místo 0 1 , protože 0,0 , 1,0 a takový bude brán jako aritmetický výraz a vyhodnocen na 0 (hodnota napravo od operátoru čárka).


Linux
  1. Jak ladit Bash skript?

  2. Jak vytvořit pole jedinečných prvků ze řetězce/pole v Bash?

  3. Vytváří `deklare -a A` prázdné pole `a` v Bash?

  1. Jak používat příkazy historie Bash

  2. Jak zjistit Bash>=4.0?

  3. jak posunout hodnotu pole v bash

  1. Jak napsat smyčku v Bash

  2. Naučte se zpracování chyb Bash na příkladu

  3. Jak mohu získat jedinečné hodnoty z pole v Bash?