小编典典

如何在bash中对整数序列进行零填充,以使它们具有相同的宽度?

all

我需要循环一些值,

for i in $(seq $first $last)
do
    does something here
done

对于$firstand $last,我需要它具有固定长度
5。因此,如果输入是1,我需要在前面添加零,使其变为0000199999例如,它循环直到,但长度必须为 5。

例如:00002, 00042, 00212,012312等等。

关于我该怎么做的任何想法?


阅读 115

收藏
2022-03-11

共1个答案

小编典典

在您的特定情况下,虽然使用该-f标志可能最容易seq让它在输出列表时格式化数字。例如:

for i in $(seq -f "%05g" 10 15)
do
  echo $i
done

将产生以下输出:

00010
00011
00012
00013
00014
00015

更一般地说,bash具有printf内置功能,因此您可以用零填充输出,如下所示:

$ i=99
$ printf "%05d\n" $i
00099

您可以使用该-v标志将输出存储在另一个变量中:

$ i=99
$ printf -v j "%05d" $i
$ echo $j
00099

请注意,它printf支持的格式略有不同,seq因此您需要使用%05d而不是%05g.

2022-03-11