Não coloque um "0" no início do número - ele trata o número na base octal . Simplesmente atribua o número decimal.
a=10
printf "%04d" $a
0010
Se você estiver lendo os números em algum outro lugar, considere remover os 0s no começo da seguinte forma:
a=0010
b=$(echo $a | sed 's/^0*//')
printf "%04d" $a
0008
printf "%04d" $b
0010