Sim, no Bash, a expansão de chaves é feita como a primeira coisa, antes de expandir as variáveis. O que significa que isso não funciona como você deseja:
$ a=1; b=5; echo {$a..$b}
{1..5}
(As chaves são expandidas primeiro, dando {$a..$b}
, depois as variáveis, dando {1..5}
.)
Mas você pode fazer isso (se você já tiver um uso para isso):
$ aa=123;ab=456; echo $a{a,b}
123 456
A utilização de eval
funciona, uma vez que força um passe de avaliação adicional, mas geralmente não é uma boa ideia, uma vez que irá avaliar, e. comanda expansões e outras de nomes de arquivos contendo $
sinais, o que geralmente não é o que você quer.
Se você tem um intervalo numérico, como aqui, você pode usar um loop:
S=1;E=3;
for (( i=$S; i <= $E; i++ )) ; do
echo $i
done
ou:
while [ $S -le $E ] ; do
echo $S
S=$[ $S + 1]
done
Além disso, zsh
faz a expansão de suporte conforme desejado:
$ zsh -c 'a=1; b=5; echo {$a..$b}'
1 2 3 4 5