Variável local como parte do global

2

Tenho uma pergunta sobre algo semelhante a this question, mas eu preciso chamar a variável global dependendo da local.

Digamos que eu queira passar teste, teste ou produção como uma variável para um script, eu poderia fazer algo assim:

#!/bin/bash
env=$1

export ENV_$env=some_param

echo $ENV_${env}

Mas a variável global não parece ser recuperada:

# ./script.sh test
test

O caso de uso deste script é fornecer isolamento para que os processos funcionem em paralelo.

    
por Sergey 17.04.2015 / 16:20

2 respostas

0

Tente executar o export no escopo de uma chamada para eval :

eval export ENV_${env}=some_param

Isso garante que o shell expanda ENV_${env} apropriadamente para um dos seus nomes esperados, antes de tentar atribuir a ele.

Você também precisará usar eval ao tentar recuperar o valor armazenado em sua variável:

eval echo \$ENV_$env

Observe a barra invertida - impede que o shell tente expandir a variável inexistente $ENV_ até que tenha expandido a parte $env com o eval incorporado. É o resultado dessa expansão que é passada para echo , que recebe o nome completo de sua variável dinâmica e a expande para gerar o valor armazenado anteriormente.

    
por 17.04.2015 / 17:02
2

Com base em esta resposta , acredito que use

varname="ENV_$env"
echo ${!varname}

poderia ser uma solução.

    
por 17.04.2015 / 17:11