簡體   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