我正在尝试使用矩阵打印一些在 Slackware 中生成矩阵的元素。首先,我在生成矩阵时打印矩阵。然后我打印,然后我更改[5,5] 上的元素,然后再次打印。
#!/bin/bash
MW=10
MH=10
function Inic {
for (( i=0 ; i<$MH ; i++ )) do
for (( j=0 ; j<$MW ; j++ )) do
MATRIX[${i},${j}]="$i$j" ;
printf "${MATRIX[$i,$j]} " ;
done
printf "\n" ;
done
printf "\n" ;
}
function Print {
for (( Imp=0 ; Imp<$MH ; Imp++ )) do
for (( Jmp=0 ; Jmp<$MW ; Jmp++ )) do
printf "${MATRIX[$Imp,$Jmp]} " ;
done
echo
done
printf "\n"
}
Inic;
Print;
MATRIX[5,5]='**'
Print;
问题是,当我运行脚本时,它会向我显示:
00 01 02 03 04 05 06 07 08 09
10 11 12 13 14 15 16 17 18 19
20 21 22 23 24 25 26 27 28 29
30 31 32 33 34 35 36 37 38 39
40 41 42 43 44 45 46 47 48 49
50 51 52 53 54 55 56 57 58 59
60 61 62 63 64 65 66 67 68 69
70 71 72 73 74 75 76 77 78 79
80 81 82 83 84 85 86 87 88 89
90 91 92 93 94 95 96 97 98 99
90 91 92 93 94 95 96 97 98 99
90 91 92 93 94 95 96 97 98 99
90 91 92 93 94 95 96 97 98 99
90 91 92 93 94 95 96 97 98 99
90 91 92 93 94 95 96 97 98 99
90 91 92 93 94 95 96 97 98 99
90 91 92 93 94 95 96 97 98 99
90 91 92 93 94 95 96 97 98 99
90 91 92 93 94 95 96 97 98 99
90 91 92 93 94 95 96 97 98 99
90 91 92 93 94 ** 96 97 98 99
90 91 92 93 94 ** 96 97 98 99
90 91 92 93 94 ** 96 97 98 99
90 91 92 93 94 ** 96 97 98 99
90 91 92 93 94 ** 96 97 98 99
90 91 92 93 94 ** 96 97 98 99
90 91 92 93 94 ** 96 97 98 99
90 91 92 93 94 ** 96 97 98 99
90 91 92 93 94 ** 96 97 98 99
90 91 92 93 94 ** 96 97 98 99
为什么它只保留最后一行?
答案 0 :(得分:2)
MATRIX
是一个普通的索引数组。这意味着
MATRIX[$i,$j]
在aritmetic上下文中进行计算,其中$i, $j
使用对其右侧操作数求值的逗号运算符。你想要使用的是一个关联数组,它将其索引视为任意字符串,
declare -A MATRIX
Inic
似乎有效,因为您打印每个矩阵单元格,然后才能被另一个条目覆盖。
答案 1 :(得分:1)
因为(1)virtual
只有1维数组,(2)bash
索引被评估为算术表达式,(3)逗号分隔的算术表达式列表评估到最后一个表达式。因此[...]
与MATRIX[5,5]
相同,与MATRIX[71,22,33,94,5]
相同。
可以使用MATRIX[5]
代替MATRIX[$i * $MW + $j]
。