저는 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_env
attr
DEV[@]