例如,我想从 001 数到 100。这意味着零缓冲区将从 2、1 开始,然后在达到 100 或更多时最终为 0。
例如:001 002 ... 010 011 ... 098 099 100
如果数字有预定义的零个数,printf "%02d" $i,我可以这样做。但这是静态的而不是动态的,在我的示例中不起作用。
例如,我想从 001 数到 100。这意味着零缓冲区将从 2、1 开始,然后在达到 100 或更多时最终为 0。
例如:001 002 ... 010 011 ... 098 099 100
如果数字有预定义的零个数,printf "%02d" $i,我可以这样做。但这是静态的而不是动态的,在我的示例中不起作用。
如果静态与动态的意思是您希望能够使用变量作为宽度,您可以这样做:
$ 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
星号被参数列表中它对应的变量的值替换($padtowidth
在这种情况下)。
否则,您的示例不起作用的唯一原因是您在应该为“3”(如我的示例中)时使用“2”(可能好像它是要应用的最大填充),因为该值是结果总数宽度(不是仅焊盘宽度)。
如果您的系统有它,请尝试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
在 Bash 版本 4(使用 bash -version)中,您可以使用大括号扩展。在任一限制之前放置 a0
会强制数字用零填充
echo {01..100} # 001 002 003 ...
echo {03..100..3} # 003 006 009 ...
#!/bin/bash
max=100;
for ((i=1;i<=$max;i++)); do
printf "%0*d\n" ${#max} $i
done
上面的代码将根据最大值/终端值包含的位数自动用正确数量的 0 填充您的数字。您需要做的就是更改max
变量,其余的将由它处理。
例子:
01
02
03
04
05
06
07
08
09
10
001
002
003
004
005
006
...
097
098
099
100
0001
0002
0003
0004
0005
0006
...
0997
0998
0999
1000
# jot is available on FreeBSD, Mac OS X, ...
jot -s " " -w '%03d' 5
jot -s " " -w '%03d' 10
jot -s " " -w '%03d' 50
jot -s " " -w '%03d' 100
如果您需要使用可变填充将值填充到可变数字:
$values_count=514;
$padding_width=5;
for i in 0 `seq 1 $(($values_count - 1))`; do printf "%0*d\n" $padding_width $i; done;
这将打印出 00000、00001、... 00513。(我没有找到任何满足我需要的当前答案)