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

Shell脚本中如何从给定数字中逐位读取每一位数字?

问题原因

你原本的代码中内层for j in $a遍历的是未拆分的完整数字字符串,每次只会输出整个数字,外层while循环执行6次,就会出现连续输出6次完整原数字的问题。

最简实现方案

可以直接用fold命令按单个字符切割输入的数字字符串,直接输出每一位:

read a # 读取6位数字
echo "$a" | fold -w1
纯Shell原生语法实现(无需调用外部命令)

利用Shell的字符串切片特性逐位取字符,兼容性更好:

read a # 读取6位数字
# ${#a} 获取输入字符串的总长度
for ((i=0; i<${#a}; i++))
do
    # ${a:i:1} 从下标i的位置截取1个字符
    echo "${a:i:1}"
done
原代码的适配修改

如果你需要保留原本的while循环结构,调整如下即可:

read a #reads a six digit number 
n=1
while [ $n -le 6 ]
do
    # Shell字符串下标从0开始,所以取第n位需要下标为n-1
    echo "${a:n-1:1}"
    n=$((n+1))
done

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 04:12:03