Você pode tentar:
eval rm foo.{$ext0..$extN}
Não tenho certeza se esta é a melhor resposta, mas certamente é uma delas.
Eu quero usar $var in uma expansão de chave shell com um intervalo, no bash.
Simplesmente colocar {$var1..$var2} não funciona, então eu fui "lateral" ...
As obras a seguir, mas são um pouco desajeitadas.
# remove the split files
echo rm foo.{$ext0..$extN} rm-segments > rm-segments
source rm-segments
Existe uma maneira mais "normal"?
Como você já percebeu, {1..3} expande para 1 2 3 , mas {foo..bar} ou {$foo..$bar} não aciona a expansão de contraventamento e a segunda é subsequentemente expandida para substituir $foo e $bar por seus valores.
Um fallback no GNU (por exemplo, Linux não incorporado) é o comando seq .
for x in 'seq $ext0 $extN'; do rm foo.$x; done
Outra possibilidade. se foo. não contiver caractere especial de shell, é
rm 'seq $ext0 $extN | sed 's/^/foo./''
A solução mais simples é usar zsh, onde rm foo.{$ext0..$extN} faz o que você quer.
function f_over_range {
for i in $(eval echo {$1..$2}); do
f $i
done
}
function f {
echo $1
}
f_over_range 0 5
f_over_range 00 05
Notas:
Tags bash shell brace-expansion