如何使用数组值替代其他数组的名称

如何使用数组值替代其他数组的名称

我对 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

所以本质上,我的目标是循环遍历所有环境(DEVTESTPROD)并访问每个数组的属性以构建连接字符串。

此时我有一个新文件(出于测试目的,我将其命名为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[@]

相关内容