I need to loop some values,
for i in $(seq $first $last)
do
does something here
done
For $first
and $last
, I need it to be of fixed length 5. So if the input is 1
, I need to add zeros in front such that it becomes 00001
. It loops till 99999
for example, but the length has to be 5.
E.g.: 00002
, 00042
, 00212
, 12312
and so forth.
Any idea on how I can do that?
In your specific case though it's probably easiest to use the -f
flag to seq
to get it to format the numbers as it outputs the list. For example:
for i in $(seq -f "%05g" 10 15)
do
echo $i
done
will produce the following output:
00010
00011
00012
00013
00014
00015
More generally, bash
has printf
as a built-in so you can pad output with zeroes as follows:
$ i=99
$ printf "%05d\n" $i
00099
You can use the -v
flag to store the output in another variable:
$ i=99
$ printf -v j "%05d" $i
$ echo $j
00099
Notice that printf
supports a slightly different format to seq
so you need to use %05d
instead of %05g
.