Como ler o valor da variável, onde o nome da variável é o valor de outra variável

6

Acho que um exemplo está em ordem. Considere que eu tenho essas duas variáveis de ambiente configuradas (por uma ferramenta de Entrega Contínua): PACKAGE_VER=1.2.3 e USE_VERSION_FROM=PACKAGE_VER .

O que eu quero agora é um script que não possa prever o nome da variável que aponta 1.2.3 , somente USE_VERSION_FROM . E assim, estou procurando uma maneira de fazer com que meu script saiba a versão a ser usada ( 1.2.3 ) sem saber nada além de que USE_VERSION_FROM indica o nome da variável que contém o número da versão.

Minha primeira tentativa ingênua de não trabalhar:

#!/bin/bash
VERSION_TO_USE="${${USE_VERSION_FROM}}"
    
por Fredrik Wendt 22.01.2014 / 20:28

1 resposta

6
PACKAGE_VER=1.2.3
USE_VERSION_FROM=PACKAGE_VER
VERSION_TO_USE=${!USE_VERSION_FROM}
echo $VERSION_TO_USE
1.2.3

Isso é "expansão de parâmetro indireta", conforme descrito em o manual da bash

Note que não é estritamente necessário fornecer cotas em uma atribuição de variável a=$b vs a="$b" - a divisão de palavras não é executada durante uma atribuição (não é possível encontrar a referência para isso agora)

    
por 22.01.2014 / 20:35