起初,我用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]=1
与matrix[1,2,3,4,5,etc,10]=1
相同 与matrix[10]=1
相同。
您可以使用关联数组,在这种情况下,[...]
中的内容是一个字符串,在这种情况下,,
将是一个字符。declare -A matrix
.请注意,您的循环(( i=0; i<10; i++))
永远不会转到10
。