[英]Bash: filling 2d Array - strange behaviour
起初我用declare -a matrix声明了一个数组并且不初始化任何值。 然后我按以下方式打印数组的值:如果特定 position 上的矩阵值等于 1,则应打印 1,否则应打印 _
因此,在不设置任何值的情况下,我得到了可预测的 output。
但是,例如,如果我执行: matrix[10,10]=1并打印数组,突然总是在 position matrix[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
那是 output:
____________________
____________________
____________________
____________________
____________________
____________________
____________________
____________________
____________________
____________________
__________1_________
__________1_________
__________1_________
__________1_________
__________1_________
__________1_________
__________1_________
__________1_________
__________1_________
__________1_________
Bash中没有2D arrays。
[..]
中的内容是经过算术计算的。 ,
有一个逗号运算符。 结果是第二个值。 matrix[10,10]=1
与matrix[1,2,3,4,5,etc,10]=1
相同 与matrix[10]=1
相同。
您可以使用关联 arrays,在这种情况下, [...]
中的内容是一个字符串,在这种情况下,
将是一个字符。 declare -A matrix
。 请注意,您的循环(( i=0; i<10; i++))
永远不会达到10
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.