DSH*_*H72 6 command-line bash scripts
我正在尝试使用脚本中的数组添加我随机生成的前 20 个数字。这可能吗?
我使用我之前的脚本生成了 100 个数字,并希望我也可以在这种情况下使用它。现在我需要使用数组添加前 20 个。我可以在我的脚本中加入一个函数来解决这个问题吗?
MAXCOUNT=100
count=1
while [ "$count" -le $MAXCOUNT ]; do
number[$count]=$RANDOM
let "count += 1"
done
echo "${number[@]}
Run Code Online (Sandbox Code Playgroud)
ter*_*don 12
我想您是在问如何获取 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
Run Code Online (Sandbox Code Playgroud)
一般格式为${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
Run Code Online (Sandbox Code Playgroud)
或者,您可以只迭代数组的前 20 个元素:
for((i=0;i<20;i++))
do
sum=$(( sum + number[$i] ))
done
echo "$sum"
Run Code Online (Sandbox Code Playgroud)
这两种方法都假定您正在添加整数。Bash 不处理浮点数,因此如果您尝试添加分数,它们会中断。如果这是一个问题,请使用@hemayl 的巧妙技巧或任何其他可以进行数学运算的程序。例如:
echo "${number[@]:0:20}" | perl -lane '$k+=$_ for @F; print $k'
Run Code Online (Sandbox Code Playgroud)
添加数组的前 20 个数字number:
echo "${number[@]:0:20}" | tr ' ' '+' | bc
Run Code Online (Sandbox Code Playgroud)
或者
tr ' ' '+' <<<"${number[@]:0:20}" | bc
Run Code Online (Sandbox Code Playgroud)
"${number[@]:1:20}"获取数组的前 20 个元素
tr ' ' '+'将所有空格转换为+以便我们可以将其用作输入bc来完成加法