You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Shell循环为数组填充1-100求和值时遇重复值问题求助

问题分析与解决

嘿,这问题我熟!你踩了个Shell命令的常见坑——用错sum命令啦!

为什么会得到重复的00034 1?

sum是Unix/Linux系统里用来计算文件(或标准输入)的校验和与字节数的工具,根本不是做数值求和的!比如你执行echo 1 | sum,它输出的是字符串"1\n"(echo默认加换行)的校验和(00034)和字节数(1),而不是1到i的求和结果。再加上你没给i初始化初始值,第一次循环时$i是空值,自然每次输出都是同一个校验和。

修正后的代码方案

下面给你两种正确实现“将1到i的求和值填充到数组sumList第i位”的写法:

方案1:用数学公式直接计算(高效)

利用等差数列求和公式:1+2+...+i = i*(i+1)/2,直接计算每个位置的和:

# 初始化循环变量和数组
i=1
declare -a sumList

while [ $i -le 100 ]; do
    # 用Shell算术表达式计算求和值
    sum_val=$(( i * (i + 1) / 2 ))
    # 填充数组(索引从1到100)
    sumList[$i]=$sum_val
    # 打印验证结果
    echo "1到$i的和:${sumList[$i]}"
    # 循环自增
    i=$((i + 1))
done

方案2:循环累加(直观易理解)

如果想一步步累加计算,适合学习循环逻辑:

i=1
declare -a sumList
current_sum=0

while [ $i -le 100 ]; do
    # 累加当前i到总和
    current_sum=$((current_sum + i))
    sumList[$i]=$current_sum
    echo "1到$i的和:${sumList[$i]}"
    i=$((i + 1))
done

额外需要注意的点

  • 变量初始化:你的原始代码里没给i赋初始值,第一次循环时$i是空值,会导致判断条件[ $i -le 100 ]报错,必须先设置i=1。
  • 数组声明:虽然Shell允许直接使用数组,但显式用declare -a sumList声明数组会让代码更清晰,避免潜在问题。

内容的提问来源于stack exchange,提问作者jonas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:50:27