retorna o valor numérico de uma variável indexada em vez de seu nome [duplicado]

1

O seguinte trecho de código ilustra meu problema Eu tenho medo de ter simplificado demais no primeiro round.

#!/bin/bash
dogLover=1
catLover=2
for ii in dog cat
    do
        petLover=${ii}Lover
        echo (evaluate $petLover)
    done

Eu quero que o código retorne os valores numéricos 1 e 2 em vez de cão e gato. Presumivelmente, isso é fácil de fazer, mas não consigo ver como está a web.

O que eu realmente preciso é um equivalente do bash do comando "eval" no matlab

    
por Leo Simon 28.10.2013 / 07:16

3 respostas

0

Enquanto o que StephaneChazelas disse está correto, você pode usar eval , como prática geral muitas pessoas tentam ficar longe de eval.

O que você pode fazer para isso é usar 'expansão indireta'. É um bashismo que é usado quando você tem uma variável que contém o nome de outra variável. Para usá-lo, basta prefixar a variável com um ! dentro de uma chave.

Por exemplo:

# var=foobar
# varname=var
# echo "${!varname}"
foobar

A desvantagem disso é que não é POSIX. O que significa que não é garantido que esteja disponível em todos os shells. Mas como as tags da sua pergunta incluíram bash , isso pode ser aceitável.

    
por 28.10.2013 / 13:35
1

Para excluir a referência, em qualquer shell Bourne ou POSIX:

dogLover=1
ii=dog
eval "petLover=\${${ii}Lover}"
echo "$petLover"
    
por 28.10.2013 / 12:07
0

No loop for você não está usando o texto 'dog' e 'cat' nem as variáveis.

Use

for ii in $dog $cat ; do

isso se expandirá para

for ii in 1 2 ; do
    
por 28.10.2013 / 07:49

Tags