我正在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:
由于
答案 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