一尘不染

如何在bash中声明2D数组

linux

我想知道如何在bash中声明2D数组,然后初始化为0。

在C中看起来像这样:

int a[4][5] = {0};

以及如何为元素分配值?如在C中:

a[2][3] = 3;

阅读 270

收藏
2020-06-02

共1个答案

一尘不染

您可以使用例如哈希来模拟它们,但需要注意前导零和许多其他事情。下一个演示有效,但远非最佳解决方案。

#!/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。好处:

  • 可以用于任意维度的数组;)像:30,40,23维。
  • 语法类似于数组的“ C” ${matrix[2,3]}
2020-06-02