Problema: como fazer o shell reconhecer o valor de uma variável na saída de um vetor? [RESOLVIDO]

1. Problema: como fazer o shell reconhecer o valor de uma variável na saída de um vetor? [RESOLVIDO]

Mestre Kame
mlgrassi

(usa Debian)

Enviado em 01/04/2017 - 22:19h

Tenho a seguinte situação:
Possuo vários vetores previamente populados:
vetor_A=(1 2 3 4 5)
vetor_B=(6 7 8 9 10)
vetor_C=(11 12 13 14)

... e daí por diante

Meu objetivo é passar como parâmetro para a função a seguir, uma variável contendo apenas o final do nome da variável do vetor. Pois se observarmos o formato das variáveis vetor, percebe-se que apenas o final muda, ou seja, A, B e C.
Logo, quando eu precisar exibir ou manipular os valores dos vetores, ao invés de fazer um laço para cada vetor, eu simplesmente preciso passar o parâmetro que referencia o vetor alvo para a função:

func_dinamica_vetor () {
for((i=0;i<${#vetor_$1[@]};i++));do
echo ${vetor_$1[$i]};
done
}

func_dinamica_vetor B

No caso acima estou tentando exibir o conteúdo individual de cada índice do vetor B, porém, está ocorrendo erro de bash: ${vetor_$1[0]}: substituição incorreta, acredito que seja por causa do simbolo de dólar que está entre chaves para referenciar o primeiro parâmetro recebido pela função.
Saberiam me dizer como contornar isso ou outra forma que não fuja muito desta lógica para fazer isso funcionar?


  


2. MELHOR RESPOSTA

Paulo
paulo1205

(usa Ubuntu)

Enviado em 03/04/2017 - 16:38h

Você vai precisar de eval para tanto.

$ var_a=1
$ var_b=2
$ x=a
$ eval "echo \$var_$x"
1
$ x=b
$ eval "echo \$var_$x"
2


3. Re: Problema: como fazer o shell reconhecer o valor de uma variável na saída de um vetor? [RESOLVIDO]

Mestre Kame
mlgrassi

(usa Debian)

Enviado em 03/04/2017 - 17:03h

Como sempre
paulo1205
, resposta imediata, correta e matou a pau.
Muito obrigado.

Não sei se o post irá servir para outras pessoas, mas para mim serviu em meu script e funcionou 100%.

De qualquer modo irei compartilhar a maneira como esse trecho de código em sehll script funciona utilizando sua dica. Lembrando que para trabalhar com o eval dentro do for não funciona, mas basta utilizar uma variável para receber a saída anteriormente, logo:

vetor_A=(1 2 3 4 5)
vetor_B=(6 7 8 9 10)
vetor_C=(11 12 13 14 15)

func_dinamica_vetor () {
aux=$(eval echo \${#vetor_$1[@]})
for((i=0;i<$aux;i++));do
eval "echo \${vetor_$1[$i]}";
done;
}









Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts