Desculpe meter minha colher de pau no bolo de vcs mas o Itamar usou o termo "proteger" (você precisa proteger a variável "i"), qdo o termo correto seria "delimitar".
Não estou criticando a resposta do Itamar de forma alguma, ele resolveu o problema do Rodrigo numa boa e tenho visto peals respostar que o Itamar coloca na lista, que ele é bom nisso. Mas quero passar esse conceito que eu vejo muita gente usar indevidamente. Vamulá:
Nos primórdios do Bourne Shell vc só conseguia manipular 9 parâmetros $1, $2, ..., $9. $10 significava o $1 seguido de um zero. Isso não quer dizer que vc não conseguia passar mais de 10 parâmetros, mas vc tinha de usar macetes para trabalhar com parâmetros de ordem superior a 9 (o shift era um deles).
Foi por isso que foi criada a expansão de parâmetros (cuja definição foi mega ampliada para o que vemos hj). Assim se $10 significava o $1 seguido de um zero, ${10} significava o 10º parâmetro. Aí o pessoal passou a usar as chaves indiscriminadamente o que dificulta a legibilidade e enfeia o prg.
Então qdo vc fez:
0${i}010000
vc dizia que os zeros não eram o nome da variável. O nome estava limitado ao 'i'.
Olha um exemplo interessante:
Bold=$(tput bold)
Norm=(tput sgr0)
echo Escrevendo em ${bold}bold e voltando ao $Norm normal