GNU/Linux >> Linux の 問題 >  >> Linux

bashで2D配列を宣言する方法

たとえば、ハッシュを使用してそれらをシミュレートできますが、先頭のゼロや他の多くのことに注意する必要があります。次のデモンストレーションは機能しますが、最適なソリューションにはほど遠いです。

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

上記の例では、乱数を使用して 4x5 マトリックスを作成し、それを転置して出力し、結果の例を示します

           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

原則は次のとおりです。インデックスが 3,4 のような文字列である 1 つの連想配列を作成する .メリット:

  • 任意の次元の配列に使用できます;) 次のように:30,40,2 3 次元用。
  • 構文は配列のように "C" に近い ${matrix[2,3]}

Bash には多次元配列がありません。ただし、連想配列を使用して多少似た効果をシミュレートできます。以下は、多次元配列として使用されるように装った連想配列の例です:

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

配列を連想として宣言しない場合 (-A を使用) )、上記は機能しません。たとえば、declare -A arr を省略した場合 行、echo 2 3 を出力します 0 1 の代わりに 、なぜなら 0,01,0 これは算術式と見なされ、0 と評価されます。 (コンマ演算子の右側の値)


Linux
  1. Bashスクリプトをデバッグする方法は?

  2. バッシュを検出する方法>=4.0?

  3. bashで配列値をシフトする方法

  1. Bash履歴コマンドの使用方法

  2. Bashでループを作成する方法

  3. 例でBashエラー処理を学ぶ

  1. Bashの文字列/配列から一意の要素の配列を作成するにはどうすればよいですか?

  2. `declare -a A`はBashで空の配列`a`を作成しますか?

  3. Bashの配列から一意の値を取得するにはどうすればよいですか?