如何从数组中读取前n个元素

sum=0 read n read -a array for i in "${array[@]}" do sum=$(( $sum + $i )) done echo $sum 

我是新的脚本。 在这里,我想知道我可以使用什么来添加条件,以便读数组将被限制n次。

例如:

 3 1 2 3 4 

这里应该只加1 2 3,不应该拿4。

我更喜欢bash C for循环,它不需要条件来逃避循环,看起来整洁。

 #! /bin/bash sum=0 read n read -a array for ((x=0; x<n; x++)) do sum=$(( sum + array[x] )) done echo "$sum" 

您可以完全避免循环,并使用参数替换来切片数组,如下所示:

 $ cat script.bash sum=0 read -p "Enter n: " n read -p "Enter space separated array elements: " -a array echo "${array[@]:0:$n}" | sed 's/\s/+/g' | bc $ ./script.bash Enter n: 3 Enter space separated array elements: 1 2 3 4 6 $ 

echo "${array[@]:0:$n}" | sed 's/\s/+/g' | bc echo "${array[@]:0:$n}" | sed 's/\s/+/g' | bc这个语句动态地切片数组,并用+替换空格以形成加法表达式,然后将其传送给bc (计算器)

 sum=0 i=0 read n read -a array while [[ $i -lt $n ]] do sum=$(( $sum + ${array[$i]})) let i++ done echo $sum 

我试过这个,它的工作。 顺便说一句,谢谢大家

sum = 0读取n j = 0读取-a数组

  for i in "${array[@]}" do if [[ $j -ge $n ]];then break else sum=$(( $sum + $i )) (( j = j + 1 )) fi done 

echo $ sum

 #!/bin/bash param=$1 sum=0 for i in {0..$param} do let " sum = $sum + ${array[$i]} " done echo "RESULT: $sum" 

并执行

 ./scipt.sh n