在这里,3根据需要设置要用前导零填充的位数,并且可以设置为任何正整数。不过,这可能需要足够新的seq版本。看看@AminAbbaspour的answer in another thread,功劳归谁。 如果需要的话,上述输出可以在echo(如果前面提到的大括号扩展不是一个选项)和printf中使用。例如:
$ for i in $(seq -f "%03g" 1 100); do echo "file-${i}.log"; done
file-001.log
file-002.log
file-003.log
...
file-098.log
file-099.log
file-100.log
7条答案
按热度按时间uplii1fm1#
如果静态与动态的意思是你希望能够使用一个变量的宽度,你可以这样做:
星号被替换为它在参数列表中对应的变量的值(在本例中为
$padtowidth
)。否则,你的例子不起作用的唯一原因是你使用了“2”(也许就像它是要应用的最大填充),而它应该是“3”(就像我的例子一样),因为这个值是结果的总宽度(而不是唯一的填充宽度)。
de90aj5v2#
如果您的系统有
seq
,请使用-w
(--equal-width
)选项尝试seq
:y0u0uwnf3#
在Bash版本4(使用bash -version)中,你可以使用大括号扩展。将
0
置于任一限制之前,会强制数字填充零xxb16uws4#
上面的代码将根据max/terminal值包含的位数自动填充正确的0。你所需要做的就是改变
max
变量,它会处理剩下的事情。示例如下:
max=10
max=100
max=1000
k4emjkb15#
jq6vz3qz6#
如果您需要使用变量填充将值填充到一个变量数字:
这将打印出00000,00001,... 00513.(我没有找到任何当前的答案满足我的需求)
epfja78i7#
补充@DennisWilliamson的answer:
seq
的-f
参数是实现相同目的的一种可能方式:在这里,
3
根据需要设置要用前导零填充的位数,并且可以设置为任何正整数。不过,这可能需要足够新的seq
版本。看看@AminAbbaspour的answer in another thread,功劳归谁。如果需要的话,上述输出可以在
echo
(如果前面提到的大括号扩展不是一个选项)和printf
中使用。例如:当然,对于这种简单的情况,通过
for
循环和printf
/echo
的迂回可能是多余的-seq
单独可以产生相同的输出: