Внимание, если ваша входная строка имеет начальный ноль!
printf по-прежнему будет выполнять заполнение, но также преобразует вашу строку в шестнадцатеричный восьмеричный формат.
# looks ok
$ echo `printf "%05d" 03`
00003
# but not for numbers over 8
$ echo `printf "%05d" 033`
00027
Решением этой проблемы является печать числа с плавающей точкой вместо десятичной.
Хитрость заключается в пропуске десятичных знаков с .0f
.
# works with leading zero
$ echo `printf "%05.0f" 033`
00033
# as well as without
$ echo `printf "%05.0f" 33`
00033