例如,我想从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 在这种情况下)。

否则,您的示例不起作用的唯一原因是您使用“2”(也许它是要应用的最大填充),而它应该是“3”(如我的示例中),因为该值是结果总数宽度(不是仅焊盘宽度)。

其他提示

如果您的系统拥有,请尝试 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)中,您可以使用 支撑扩展. 。放一个 0 在任何限制迫使要填充零的数字之前

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

上面的代码将根据最大/终端值包含多少位数的数字来自动填充您的数字。您需要做的就是更改 max 可变,将处理其余的。

例子:

最大= 10

01
02
03
04
05
06
07
08
09
10

最大= 100

001
002
003
004
005
006
...
097
098
099
100

最大= 1000

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。(我没有找到当前满足我需求的任何答案)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top