Bash:填充 2d 数组 - 奇怪的行为



起初,我用declare -a 矩阵声明一个数组,并且不初始化任何值。 然后我按以下方式打印数组的值: 如果特定位置上的矩阵值等于 1,则应打印 1,否则应打印 _

因此,无需设置任何值,我就会获得可预测的输出。

但是,如果我例如这样做:矩阵[10,10]=1并且我打印数组,突然总是在位置矩阵[x,10]值始终为1。

为什么它的行为是这样的? 如果我只想用 1 而不是同一行中的所有其他位置初始化某些特定位置,我该怎么办?

#!/bin/bash
#read N
declare -a matrix
for (( i=0; i<10; i++));do
for (( j=0; j<20; j++));do
if [[ matrix[$i,$j] -eq 1 ]];then
printf 1
else
printf _
fi
done
echo
done
echo
matrix[10,10]=1
for (( i=0; i<10; i++));do
for (( j=0; j<20; j++));do
if [[ matrix[$i,$j] -eq 1 ]];then
printf 1
else
printf _
fi
done
echo
done

这是输出:

____________________
____________________
____________________
____________________
____________________
____________________
____________________
____________________
____________________
____________________
__________1_________
__________1_________
__________1_________
__________1_________
__________1_________
__________1_________
__________1_________
__________1_________
__________1_________
__________1_________

Bash 中没有 2D 数组。

[..]里面的东西是算术计算的。,有一个逗号运算符。结果是第二个值。matrix[10,10]=1matrix[1,2,3,4,5,etc,10]=1相同 与matrix[10]=1相同。

您可以使用关联数组,在这种情况下,[...]中的内容是一个字符串,在这种情况下,,将是一个字符。declare -A matrix.请注意,您的循环(( i=0; i<10; i++))永远不会转到10

最新更新