在bash中,我如何添加带有前导零的整数并维护指定的缓冲区

rea*_*dit 29 bash shell output-formatting

例如,我想从001到100计数.意味着零缓冲区将从2,1开始,然后在达到100或更多时最终为0.

例如:001 002 ... 010 011 ... 098 099 100

如果数字与printf"%02d"$ i有预定义数量的零,我可以这样做.但这是静态的而不是动态的,在我的例子中不起作用.

mob*_*mob 33

如果您的系统有,请尝试seq使用-w(--equal-width)选项:

$ seq -s, -w 1 10
01,02,03,04,05,06,07,08,09,10

$ for i in `seq -w 95 105` ; do echo -n " $i" ; done
095 096 097 098 099 100 101 102 103 104 105
Run Code Online (Sandbox Code Playgroud)


Pau*_*ce. 33

如果静态与动态意味着您希望能够使用变量作为宽度,则可以执行以下操作:

$ padtowidth=3
$ for i in 0 {8..11} {98..101}; do printf "%0*d\n" $padtowidth $i; done
000
008
009
010
011
098
099
100
101
Run Code Online (Sandbox Code Playgroud)

星号由参数列表中对应的变量值($padtowidth在本例中)替换.

否则,你的例子不起作用的唯一原因是你应该使用"2"(也许好像它是应用的最大填充),当它应该是"3"(如我的例子中),因为该值是结果总数宽度(不是仅限焊盘的宽度).


Joh*_*itb 12

在Bash版本4(使用bash -version)中,您可以使用大括号扩展.把一个0或者限制之前强制通过零填充数字

echo {01..100} # 001 002 003 ...
echo {03..100..3} # 003 006 009 ...
Run Code Online (Sandbox Code Playgroud)


Sie*_*geX 5

#!/bin/bash

max=100; 

for ((i=1;i<=$max;i++)); do 
    printf "%0*d\n" ${#max} $i
done
Run Code Online (Sandbox Code Playgroud)

上面的代码将根据max/terminal值包含的位数,使用正确的0数自动填充数字.您需要做的就是更改max变量,它将处理其余的变量.

例子:

最大= 10

01
02
03
04
05
06
07
08
09
10
Run Code Online (Sandbox Code Playgroud)

最大= 100

001
002
003
004
005
006
...
097
098
099
100
Run Code Online (Sandbox Code Playgroud)

最大= 1000

0001
0002
0003
0004
0005
0006
...
0997
0998
0999
1000
Run Code Online (Sandbox Code Playgroud)