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

时间:2016-04-27 06:56:13

标签: arrays linux bash loops

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。

5 个答案:

答案 0 :(得分:2)

我更喜欢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"

答案 1 :(得分:1)

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

$ 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此语句动态切片数组并用\s替换空格+以形成加法表达式,然后将其传送到bc(计算器)

答案 2 :(得分:1)

sum=0
i=0
read n
read -a array

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

echo $sum

我尝试了这个并且它有效。顺便说一下,谢谢大家

答案 3 :(得分:0)

总和= 0 阅读 J = 0 读-a数组

DECLARE @TimeString VARCHAR(MAX) = '17:34'
DECLARE @Time Time = CAST(@TimeString AS TIME)
SELECT DATEPART(hour,@Time) + (DATEPART(minute,@Time)/15) * 0.25 + ROUND(CAST(DATEPART(minute,@Time) % 15 AS FLOAT)/15, 0) * 0.25

echo $ sum

答案 4 :(得分:0)

#!/bin/bash
param=$1
sum=0

for i in {0..$param}
do
let " sum = $sum + ${array[$i]} "
done

echo "RESULT: $sum"

并执行

./scipt.sh n