如何在shell脚本中打印四位数

a64a0gku  于 2023-10-23  发布在  Shell
关注(0)|答案(2)|浏览(174)

我正在尝试编写一个shell脚本来实现这一点:
获取input 4并打印:

0000
0001
0002

直到

9999

先谢谢你了。

qij5mzcb

qij5mzcb1#

您可以使用seq生成一系列介于开始值和停止值之间的数字,并使用printf字符串:

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

如果你的操作系统是一个不包含seq(这不是POSIX要求)的超级罕见的操作系统,你可以使用awk,这是POSIX要求:

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与正确的格式。

58wvjzkj

58wvjzkj2#

1.使用for循环在所需的范围内执行循环。
1.使用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

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

相关问题