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
相关产品推荐
相关产品推荐

