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

Bash脚本修复:统计1到4321范围内数字5出现的次数

修复统计1-4321中数字"5"出现次数的Bash脚本

原脚本运行结果为0的核心问题及修复方案如下:

原脚本的问题

  1. 子shell变量隔离:for...done | while...的管道会让while循环运行在子shell中,子shell内修改的count5变量无法同步到父shell,最终输出的始终是初始值0。
  2. 无效的管道输出:最后| echo "${count5}"完全冗余,while循环没有输出内容,且echo调用的是父shell未被修改的变量。
  3. 低效的字符判断:用grep判断单个字符是否为5,既冗余又影响效率。

修复后的脚本

#!/bin/bash
typeset -i count5=0
# 用进程替换替代管道,避免子shell隔离变量
while read -n1 digit ; do
    # 直接判断字符是否为5,无需grep
    if [ "${digit}" = "5" ]; then
        count5=$((count5 + 1))
    fi
done < <(for n in {1..4321}; do echo -n "${n}"; done)
# 循环结束后直接输出统计结果
echo "${count5}"

关键修改点

  • 用进程替换(< <(...))替代管道,让while循环运行在当前shell中,确保count5变量的修改能被保留。
  • 给echo加上-n参数,去掉数字后的换行符,避免把换行符当作无效字符被读取统计。
  • 替换字符判断逻辑为直接比较"${digit}" = "5",更高效准确。
  • 用标准的Bash整数写法$((count5 + 1))更新计数,避免原写法的兼容性问题。
  • 移除最后无效的管道,直接在循环结束后输出统计结果。

运行修复后的脚本,将得到正确结果1262。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 04:30:47