Sim, isso ocorre porque a expansão de chave ocorre antes da expansão do parâmetro. Use outro shell como zsh
ou ksh93
ou use uma sintaxe alternativa:
Sintaxe sh padrão (POSIX)
i=1
while [ "$i" -le "$number" ]; do
echo "$i"
i=$(($i + 1))
done
Estilo do Ksh for ((...))
for ((i=1;i<=number;i++)); do
echo "$i"
done
use eval
(não recomendado)
eval '
for i in {1..'"$number"'}; do
echo "$i"
done
'
use o comando GNU seq
nos sistemas em que está disponível
unset -v IFS # restore IFS to default
for i in $(seq "$number"); do
echo "$i"
done
(aquele que é menos eficiente, pois ele roda e executa um novo comando e o shell precisa ler sua saída de um pipe).
Evite loops em shells.
Usar loops em um script de shell é geralmente uma indicação de que você não está fazendo certo.
Provavelmente, seu código pode ser escrito de outra forma.