我有这个烦人的问题,甚至我的老师都无法解决:/。 我想用1到100的和值填充一个数组,这是我的代码:
while [ $i -le 100 ]
do
#filling the list with the sums of i at the pos i
sumList[$i]=$(echo $i | sum)
echo $i |sum
echo $sumList[$i]
i=$(($i+1))
done
由于某种原因,它只是用第一个值填充所有点(00034 1) 我不知道该怎么做
答案 0 :(得分:0)
此处ShellCheck:
Line 6:
echo $sumList[$i]
^-- SC1087: Use braces when expanding arrays, e.g. ${array[idx]} (or ${var}[.. to quiet).
^-- SC2128: Expanding an array without an index only gives the first element.
并修复此问题:
i=1
while [ $i -le 100 ]
do
#filling the list with the sums of i at the pos i
sumList[$i]=$(echo $i | sum)
echo $i |sum
echo ${sumList[$i]}
i=$(($i+1))
done
您将获得您期望的所有不同校验和和块数:
32802 1
32802 1
00035 1
00035 1
32803 1
32803 1
00036 1
00036 1
32804 1
32804 1
[...]
答案 1 :(得分:0)
如果您实际上是从该脚本检查输出的(删除了echo $i |sum
行),那么应该清楚发生了什么:
00034 1[0]
00034 1[1]
00034 1[2]
: : :
00034 1[100]
如您所见,行echo $sumList[$i]
给您$sumList
(与${sumList[0]}
相同)和$i
分别因为根据bash
文档(我的重点):
可以使用
${name[subscript]}
引用数组的任何元素。括号是 必需 以避免冲突...
因此,如果将其更改为正确的$ {sumList [$ i]}`,您会看到是确实正确设置了数组,只是没有打印出来正确地:
00034 1
32802 1
00035 1
: : :
08244 1
而且,为了达到目标,bash
中还有 other 个设施,如果您的目标是,这些设施将使您的代码更简洁:
for i in {0..100}; do sumList[$i]="$(echo $i | sum)" ; done
IFS=$'\n' ; echo "${sumList[*]}"