繁体   English   中英

Bash:填充二维数组 - 奇怪的行为

[英]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]=1matrix[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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM