Tendo alguns problemas ao usar uma variável com um número.
Isso funciona;
sourceid_2="blah"
echo $sourceid_2
Mas isso não funciona;
sourceid_2="blah"
i=2
echo $sourceid_$i
Alguma idéia de como consertar isso? Tentei sem o sublinhado .. mas não ajudou.
Meu objetivo final é fazer algo com a variável em um loop for i in {2..7} .. assim;
for i in {2..7}
do
echo $sourceid_$i
done
Responder1
echo $sourceid_$i
expande duas variáveis separadas: $sourceid_
e $i
. A maneira mais simples de fazer o que você está tentando fazer é com uma referência indireta:
sourceid_2="blah"
i=2
var=sourceid_$i
echo "${!var}"
Mas, como apontou @dave_thompson_085, arrays geralmente são a melhor maneira de fazer esse tipo de coisa:
declare -a sourceid
sourceid[2]="blah"
i=2
echo "${sourceid[i]}"
Observe que os arrays são uma extensão do bash e não estão disponíveis em shells mais básicos.
Responder2
Seu problema não é um nome contendo um número, que funciona bem, mas um nome contendo umvariável. Você pode usar eval
(o que é difícil de acertar e fácil de estragar) ou indireção, x=source_$i; echo "${!x}"
caso em que isso é um engano dearray bash com variável no nomequal SX já colocou automaticamente na lista relacionada para você ver.
Mas se você quiser que diversas variáveis relacionadas sejam acessadas por número, melhor ainda é usar um array. É exatamente para isso que os arrays foram projetados, tornando-os mais convenientes e seguros. Para aprender sobre arrays no bash, consulte a seção do manual do bash sobre arrays, no seu sistema ouna web aqui