다른 배열 이름 대신 배열 값을 사용하는 방법

다른 배열 이름 대신 배열 값을 사용하는 방법

저는 Bash를 처음 접했고 직장에서는 Bash 3만 사용합니다. 모든 데이터베이스에 연결할 수 있는 프로세스( DEV// TEST) 를 구축하려고 합니다 PROD.

Environment.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

DEV따라서 본질적으로 내 목표는 모든 환경( , TEST, ) 을 반복 PROD하고 각 배열의 속성에 액세스하여 연결 문자열을 작성하는 것입니다.

이 시점에서 새 파일이 생겼습니다(테스트 목적으로 이름을 다음과 같이 지정했습니다 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

하지만 이 프로그램을 실행하면 다음과 같은 오류가 발생합니다.

for attr in ${cur_env[@]}

올바르게 교체하기 위해 몇 가지 다른 방법을 시도했지만 내가 뭘 잘못하고 있는지 잘 모르겠습니다.

모든 안내에 크게 감사하겠습니다.

답변1

간접 변수 참조를 권장합니다.

source ./environments.sh

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

앞에 있는 for를 참고하세요 !. 이는 이 var에 명명된 변수의 값을 사용한다는 의미입니다. 첫 번째 라운드에서는cur_envattrDEV[@]

관련 정보