主脚本

主脚本

我正在尝试在脚本中使用数组添加随机生成的前 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完成加法

相关内容