別の配列名の代わりに配列値を使用する方法

別の配列名の代わりに配列値を使用する方法

私は初めて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[@]

おすすめ記事