如何在Shell脚本中打印四位数的数字

3
我正在尝试编写一个shell脚本,它可以做到以下这些:
接收输入input 4并打印出来:
0000
0001
0002

直到
9999

提前感谢您。
2个回答

2

你可以使用 seq 命令和 printf 格式字符串生成一个从起始值到结束值的数字序列:

width=4
start=1
stop=9999
seq -f "%0${width}g" "$start" "$stop"
0001
0002
0003
0004
...
9997
9998
9999

如果您的操作系统是极为罕见的没有包含seq命令的(因为这不是POSIX的要求),您可以使用符合POSIX要求的awk命令:

awk -v w="$width" -v start="$start" -v stop="$stop" 'BEGIN{
     for(i=start;i<=stop;i++) printf("%0*d\n", w, i)}'

或者使用bc代替seq,并使用xargs在管道中调用printf

echo "for (i = $start; i <= $stop; i+=1) i" | bc -l | xargs printf "%0${width}d\n"

或者,仅使用Bash或类似的语言,采用C语言风格的循环:
for (( i=${start}; i<=${stop}; i++ )); do
    printf "%0*d\n" "$width" "$i"
done    

或者,使用任何POSIX shell,可以使用while循环:
cnt="$start"
while [ "$cnt" -le "$stop" ]; do
    printf "%0*d\n" "$width" "$cnt"
    let cnt++
done    

在这里,你的超能力是使用正确格式的 printf


0
  1. 使用 for 循环来遍历所需范围。
  2. 使用 printf 格式化要打印的数字位数。

你的问题的解决方案是

#!/bin/bash
read -p "Enter the number of digits: " num_digits
START=0
STOP=9999
for((i=${START};i<=${STOP};i++))
do
    printf '%0'${num_digits}'d\n' $i
done

保存此文件并执行。当提示输入数字位数时,请输入您想要格式化输出的数字位数。


这个printf "%0${num_digits}d\n"或许更好?此外,在Bash或shell脚本中,使用大写变量是为了表示系统和环境约定俗成的。 - dawg

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接