Como recuperar um valor de variável bash se eu tiver o nome da variável como string?
var1="this is the real value"
a="var1"
Do something to get value of var1 just using variable a.
Contexto:
Tenho algumas AMI's ( Amazon Machine Image ) e quero iniciar algumas instâncias de cada AMI. Assim que eles terminarem de inicializar, desejo configurar cada instância de acordo com seu tipo de AMI. Como não quero criar muitos scripts ou chaves secretas dentro de qualquer AMI, preparei um script de inicialização generalizado e o coloquei no S3 com um link acessível ao público. No rc.local, coloquei um pequeno pedaço de código que busca o script de inicialização e o executa. Isso é tudo o que tenho nas AMIs. Em seguida, cada AMI acessa um script de configuração comum que é aplicável a todas as AMIs e scripts de configuração especiais para cada um. Esses scripts são particulares e requerem uma URL assinada para acessá-los.
Portanto, agora, quando aciono uma instância de uma AMI (my_private_ami_1), passo uma URL assinada para mais um arquivo apresentado no S3 que contém a URL assinada para todos os scripts privados em termos de par de chave / valor.
config_url="http://s3.amazo.../config?signature"
my_private_ami_1="http://s3.amazo.../ami_1?signature"
...
Quando o script de inicialização é executado, ele baixa o arquivo acima e source
é ele. Em seguida, verifica o seu tipo de AMI e escolhe o script de instalação correto.
ami\_type=GET AMI TYPE #ex: sets ami\_type to my\_private\_ami\_1
setup\_url=GET THE SETUP FILE URL BASED ON AMI\_TYPE # this is where this problem arises
Então agora eu posso ter um código genérico que pode disparar instâncias, independentemente de seus tipos de AMI, e as instâncias podem cuidar de si mesmas.
Bad substitution
erro./bin/sh
? Nesse caso, tente usar/bin/bash
. Do Debian Squeeze em diante,/bin/sh
foi alterado para ser um link simbólico, emdash
vez debash
.dash
não suporta esta sintaxe específica e gera umBad substitution
erro.define Z como "foo"
Tome cuidado ao usar,
eval
pois isso pode permitir a extração acidental de código por meio de valores em${Y}
. Isso pode causar danos através da injeção de código.Por exemplo
criaria
/tmp/eval-is-evil
. Isso também pode ser um poucorm -rf /
, é claro.fonte
Modificado minhas palavras-chave de pesquisa e Entendi :).
Obrigado pelo seu tempo.fonte
${Y}
. Veja minha adição na resposta do usuário "anon".Para meus colegas usuários do zsh, a maneira de realizar a mesma coisa que a resposta aceita é usar:
${(P)a}
É chamado de substituição do nome do parâmetro
fonte
shells modernos já suportam matrizes (e até matrizes associativas). Então, por favor, use-os e use menos de avaliação.
quando você quiser chamá-lo, echo $ {array [0]}
fonte
$1
)?Com base na resposta: https://unix.stackexchange.com/a/111627
fonte
Teve o mesmo problema com matrizes, eis como fazê-lo se você também estiver manipulando matrizes:
Isso produzirá:
fonte