nome da variável BASH contendo número de emissão [duplicado]

0

Correndo em algum problema usando 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 corrigir isso? Eu tentei sem o sublinhado .. mas isso não ajudou.

Meu objetivo final é fazer algo com a variável em um loop i for {2..7} ... assim:

for i in {2..7}
do
echo $sourceid_$i
done
    
por Alex van Es 26.05.2017 / 07:40

2 respostas

5

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 @ dave_thompson_085 apontou, os 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 as matrizes são uma extensão bash e não estão disponíveis em shells mais básicas.

    
por 26.05.2017 / 08:04
3

O seu problema não é um nome que contenha um número, o que funciona bem, mas um nome que contém uma variável . Você pode usar eval (que é difícil de obter certo e fácil de estragar) ou indireção como x=source_$i; echo "${!x}" , caso em que isso é um dupe de matriz bash com variável no nome que o SX já colocou automaticamente na lista relacionada para você ver.

Mas se você quiser várias variáveis relacionadas acessadas por número, melhor ainda é usar uma matriz. É exatamente isso que os arrays são projetados para fazer, tornando-os mais convenientes e seguros. Para aprender sobre arrays no bash, veja a seção do manual bash sobre arrays, em seu sistema ou na Web aqui

    
por 26.05.2017 / 07:59

Tags