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