Como usar valores de matriz como substitutos de nomes de outras matrizes

3

Ainda sou novo no Bash e só posso usar o Bash 3 no trabalho. Estou tentando construir um processo que me permita conectar a todos os nossos bancos de dados ( DEV / TEST / PROD ).

Eu tenho um arquivo chamado environments.sh

#!/bin/bash
## 0 = Password, 1 = HOST, 2 = SERVICENAME

## List of all Environments
ENV[0]=DEV
ENV[1]=TEST
ENV[2]=PROD

## Dev Env Details
DEV[0]=SU_DBA_201503
DEV[1]=xxxxxx-Dev-xx.xxx.xxx.xxx  #<-- I edited this for security purposes
DEV[2]=dev.xxx.xxx 

## Test Env Details
TEST[0]=DBA_PN_0002
TEST[1]=xxxxxx-Test-xx.xxx.xxx.xxx
TEST[2]=test.xxx.xxx

## Prod Env Details
PROD[0]=TM_DB_US7a6a
PROD[1]=xxxxxx-Prod-xx.xxx.xxx.xxx
PROD[2]=prod.xxx.xxx

Então, essencialmente, meu objetivo é percorrer todos os ambientes ( DEV , TEST , PROD ) e acessar os atributos de cada array para criar uma string de conexão.

Neste ponto, eu tenho um novo arquivo (para fins de teste, eu chamo de looper.csh :

#!/bin/bash

#Get environments
source ./environments.sh

for env in ${ENV[@]}
do
    echo Current Env $env
    cur_env=$env
    for attr in ${cur_env[@]}
    do
    # Will eventually build connection string but for now, just want to echo
        echo $attr
    done
done

Mas quando eu corro isso, isso me dá um erro na linha:

for attr in ${cur_env[@]}

Eu tentei algumas maneiras diferentes para substituir isso corretamente, mas não tenho certeza do que estou fazendo de errado.

Toda e qualquer orientação seria muito apreciada.

    
por need_java 07.02.2018 / 00:03

1 resposta

2

Eu sugeriria referências indiretas a variáveis:

source ./environments.sh

for env in "${ENV[@]}"
do
    cur_env="${env}[@]"
    for attr in "${!cur_env}"
    do
        # whatever
    done
done

Observe o ! antes do cur_env no para attr , isso significa usar o valor da variável nomeada nesse var, que no primeiro turno será DEV[@]

    
por 07.02.2018 / 00:25