我正在尝试创建用户输入数组,然后将其添加到数组中的每个元素:
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)
。
答案 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上的版本。