O problema é que a expansão de chaves acontece antes da expansão de variáveis. Conforme explicado em man bash
:
The order of expansions is: brace expansion; tilde expansion, parameter and variable expansion, arithmetic expansion, and command substitution (done in a left-to-right fashion); word splitting; and pathname expansion.
Isso significa que quando você tem algo como $var
que contém {1..3}
e echo "$var"
, o shell procura por possíveis expansões de chaves antes expandindo a variável para seu valor. Como as chaves estão na variável, isso significa que, nesse ponto, o shell não vê chaves, portanto, nenhuma expansão de chave é executada.
Uma solução alternativa seria eval
da variável, se for um intervalo. Adicione estas linhas antes do seu for
loop:
if [[ $RANGE =~ ^[0-9]+\.\.[0-9]+$ ]]; then
RANGE=$(eval echo {$RANGE})
fi
Agora, em uma nota mais geral, geralmente é uma boa idéia evitar o uso de nomes de variáveis CAPITAL em scripts de shell. Variáveis de ambiente geralmente são capitalizadas e isso pode levar a misturas se você usar o mesmo nome de uma variável env definida. Portanto, use nomes de variáveis de letras minúsculas para estar no lado seguro.
Além disso, este é um programa muito chato para depurar e igualmente irritante de usar. Não solicite ao seu usuário informações em tempo de execução! Em vez disso, altere seu script e faça com que ele leve argumentos. A digitação de valores é difícil, irritante, propensa a erros e não pode ser automatizada.