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