我正在尝试在脚本中使用数组添加随机生成的前 20 个数字。这可能吗?
我使用之前的脚本生成了 100 个数字,并希望在这个场景中也能使用它。现在我需要使用数组添加前 20 个。我可以将函数合并到脚本中来解决这个问题吗?
主脚本
MAXCOUNT=100
count=1
while [ "$count" -le $MAXCOUNT ]; do
number[$count]=$RANDOM
let "count += 1"
done
echo "${number[@]}
答案1
我想你问的是如何获取 bash 数组的前 N 个元素。如果是这样,那么这应该可行:
$ array=( $(seq 1 30 ) )
$ echo ${array[@]}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
$ echo ${array[@]:0:20}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
一般格式为${array[@]:START:LENGTH}
。这将返回从 START 开始的数组的 LENGTH 个后续元素。
因此,要添加前 20 个,您可以执行以下操作(请注意,我从 0 开始,而不是 1,因为数组从 0 开始。我建议您更正脚本并count=0
在开头设置而不是count=1
;如果您不想,请将0
下面的内容更改为1
):
for i in ${number[@]:0:20}; do
sum=$((sum + i))
done
echo $sum
或者,您也可以只迭代数组的前 20 个元素:
for((i=0;i<20;i++))
do
sum=$(( sum + number[$i] ))
done
echo "$sum"
这两种方法都假设您正在添加整数。 Bash 不处理浮点数,因此如果您尝试添加分数,它们会中断。 如果这是个问题,请使用@hemayl 的巧妙的伎俩或任何其他可以进行数学运算的程序。例如:
echo "${number[@]:0:20}" | perl -lane '$k+=$_ for @F; print $k'
答案2
要添加数组的前 20 个数字number
:
echo "${number[@]:0:20}" | tr ' ' '+' | bc
或者
tr ' ' '+' <<<"${number[@]:0:20}" | bc
"${number[@]:1:20}"
获取数组的前 20 个元素tr ' ' '+'
将所有空格转换为,+
以便我们可以将其用作输入来bc
完成加法