在bash中打印多维数组只返回最后一个元素

时间:2018-02-19 11:33:52

标签: multidimensional-array bash4

我正在Bash(v.4)中进行一些关于多维数组的练习,以下是一个创建固定6x6矩阵的简单脚本。

每一行都填充一行以空格分隔的整数。第一个'echo'打印刚刚填充的元素,它是正确的。 紧接着,它用双for循环打印整个矩阵,但结果是一个6x6矩阵,只有最后一个元素(索引为5,5的元素)。

我尝试使用显式索引打印一些元素,但脚本不打印任何值。

以下代码有什么问题?

#!/bin/bash

declare -A VET
idx_max=5

for i in `seq 0 $idx_max`
do
    read string

    IFS=' ' read -r -a array <<< "$string"

    for j in `seq 0 $idx_max`
    do
        VET[i,j]=${array[j]}
        echo -n "$i,$j: ${VET[i,j]} "
    done
    echo
done

echo "========================="

for i in `seq 0 $idx_max`
do
    for j in `seq 0 $idx_max`
    do
        echo -n "$i,$j: ${VET[i,j]} "
    done
    echo
done

echo "3,4: ${VET[3,4]}"
echo "5,1: ${VET[5,1]}"
echo "5,5: ${VET[5,5]}"

这是脚本的执行:

1 2 3 4 5 6
0,0: 1 0,1: 2 0,2: 3 0,3: 4 0,4: 5 0,5: 6
7 8 9 0 1 2
1,0: 7 1,1: 8 1,2: 9 1,3: 0 1,4: 1 1,5: 2
3 4 5 6 7 8
2,0: 3 2,1: 4 2,2: 5 2,3: 6 2,4: 7 2,5: 8
9 0 1 2 3 4
3,0: 9 3,1: 0 3,2: 1 3,3: 2 3,4: 3 3,5: 4
5 6 7 8 9 0
4,0: 5 4,1: 6 4,2: 7 4,3: 8 4,4: 9 4,5: 0
1 2 3 4 5 6
5,0: 1 5,1: 2 5,2: 3 5,3: 4 5,4: 5 5,5: 6
=========================
0,0: 6 0,1: 6 0,2: 6 0,3: 6 0,4: 6 0,5: 6
1,0: 6 1,1: 6 1,2: 6 1,3: 6 1,4: 6 1,5: 6
2,0: 6 2,1: 6 2,2: 6 2,3: 6 2,4: 6 2,5: 6
3,0: 6 3,1: 6 3,2: 6 3,3: 6 3,4: 6 3,5: 6
4,0: 6 4,1: 6 4,2: 6 4,3: 6 4,4: 6 4,5: 6
5,0: 6 5,1: 6 5,2: 6 5,3: 6 5,4: 6 5,5: 6
3,4:
5,1:
5,5:

由于

1 个答案:

答案 0 :(得分:0)

好的,我弄明白为什么它不起作用。

命令&#39; 声明-A &#39;用于创建关联数组,而不是用于创建多维数组。 因此,如果您想模拟多维数组,您可以创建一个看似几个索引的键。

我修改了以下脚本中的第14行和第26行以获得结果;它是

VET[i,j]=${array[j]}

现在是

VET["$i,$j"]=${array[j]}

这是修改后的脚本:

#!/bin/bash

declare -A VET
idx_max=5

for i in `seq 0 $idx_max`
do
    read string

    IFS=' ' read -r -a array <<< "$string"

    for j in `seq 0 $idx_max`
    do
        VET["$i,$j"]=${array[j]}
    done
    echo
done

echo "========================="

for i in `seq 0 $idx_max`
do
    for j in `seq 0 $idx_max`
    do
        echo -n "$i,$j: ${VET[$i,$j]} "
    done
    echo
done

exit