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