我正在尝试编写一个shell脚本来实现这一点:获取input 4并打印:
input 4
0000 0001 0002
直到
9999
先谢谢你了。
qij5mzcb1#
您可以使用seq生成一系列介于开始值和停止值之间的数字,并使用printf字符串:
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
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:
bc
xargs
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与正确的格式。
58wvjzkj2#
1.使用for循环在所需的范围内执行循环。1.使用printf来格式化要打印的位数。你的问题的解决方案是
for
#!/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
保存此文件并执行它。当提示输入位数时,输入要格式化输出的位数。
2条答案
按热度按时间qij5mzcb1#
您可以使用
seq
生成一系列介于开始值和停止值之间的数字,并使用printf
字符串:如果你的操作系统是一个不包含
seq
(这不是POSIX要求)的超级罕见的操作系统,你可以使用awk
,这是POSIX要求:或者使用
bc
替换seq
,并使用xargs
在管道中调用printf
:或者,Bash或类似的,一个C风格的循环:
或者,任何POSIX shell,while循环:
您的 * 超级能力 * 在这里是
printf
与正确的格式。58wvjzkj2#
1.使用
for
循环在所需的范围内执行循环。1.使用
printf
来格式化要打印的位数。你的问题的解决方案是
保存此文件并执行它。当提示输入位数时,输入要格式化输出的位数。