Sua abordagem não funcionará, já que na expansão do suporte bash ocorre antes da expansão do parâmetro. Você precisa expandir a variável antes.
Você pode contornar eval :
upperlim=10
eval '
for i in {0..'"$upperlim"'}
do
echo $i
done
'
Com o While loop :
upperlim=10
#with while
start=0
while [[ $start -le $upperlim ]]
do
echo "$start"
((start = start + 1))
done
Você também pode fazer isso com o comando seq :
upperlim=10
#seq
for i in $(seq "$upperlim"); do
echo "$i"
done
Se você deseja executar com for i in {0..$upperlim}
, precisará usar o kornshell. por exemplo:
#!/bin/ksh
upperlim=10
for i in {0..$upperlim}
do
echo $i
done