如何使用Bash将5加到数组的每个数字上?

时间:2019-02-20 23:28:54

标签: bash

我正在尝试创建用户输入数组,然后将其添加到数组中的每个元素:

read number
for i in 1 2 3
  read array[$i]
done
let position=0
for i in "${array[@]}"
do
   let array[position]+=($i+$number)
   let "position++"
done
for (( i=0; $i<3; i=$1+1 ))
do 
   echo ${array[$1]}

因此,用户将为数字输入“ 5”,然后为array(90, 80, 70)输入另外三个数字。结果应该是array(95, 85, 75),但是我得到的输出是array(95, 175, 155)

1 个答案:

答案 0 :(得分:1)

更明智的写法是:

read -r number
read -r -a array

for idx in "${!array[@]}"; do
  (( array[$idx] += number ))
done

printf '%s\n' "${array[@]}"
  • 不是使用假定,而是使用"${!array[@]}"来查找索引,索引从0开始(它们最初不是因为您被明确分配给位置1、2和3),而是从0开始。 actual 索引,因此即使使用稀疏数组或未从位置0开始索引的数组也可以正常工作。
  • 它并没有复制$i右侧的+=(也就是数组中的值),而是仅添加了number本身。
  • 与其(再次)遍历索引以打印值,不如要求数组以"${array[@]}"以索引顺序转储 all 的值。

https://ideone.com/WTLJSu上查看此操作

在行为上有所不同,因为它希望所有数组值都在单行输入中传递。如果您不想这样做,请查看https://ideone.com/3OQtt3上的版本。