我对 Bash 还很陌生,工作中只能使用 Bash 3。我正在尝试构建一个允许我连接到所有数据库的进程(DEV
/ TEST
/ PROD
)。
我有一个名为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
所以本质上,我的目标是循环遍历所有环境(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[@]