Nome da variável BASH contendo problema de número

Nome da variável BASH contendo problema de número

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_$iexpande 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

informação relacionada