類似型の複数の環境変数から配列を作成する

類似型の複数の環境変数から配列を作成する

3つの異なる変数を使用し、異なる変数の設定に応じて1つの変数のみを返すbashスクリプトを作成したいと思います。したがって、

TESTA_HOST=test1.google.com
TESTB_HOST=test2.google.com
TESTC_HOST=test3.google.com
M_INDEX=2

配列で終わるすべての環境変数を検索し、_HOSTそれをインデックスと比較するために使用できます。

HOSTS="$(compgen -A variable | grep _HOST)"
export MAIN_URI="${HOSTS[M_INDEX]}"
echo $MAIN_URI

予想される出力は、test3.google.com変数の内容ではなく変数名のみを返すため、機能しないことです。私がここで何を見逃しているのでしょうか?

答え1

これ、

HOSTS="$(compgen -A variable | grep _HOST)"

HOSTS単一の文字列に設定

テストホスト[新しいチーム]TESTB_HOST[新しいチーム]テストホスト

索引付けはあまり役に立ちません。${HOSTS[0]}と同じで空です。${HOSTS}${HOSTS[1]}

代わりに割り当てると

HOSTS=( $(compgen -A variable | grep _HOST) )

その後、出力はcompgenトークン化され(グローバルに拡張され)、HOSTS結果を含む配列になります。この配列の値は変数の名前であり、その値を取得するには間接参照が必要です。これは「ポインティング」変数の値に拡張されますindex

"${!HOSTS[M_INDEX]}"

配列割り当てではデフォルト値があり、変数IFSにスペースやワイルドカードを含めることはできません。


変数に名前が指定されている場合HOST_thisHOST_that前に固定部分がある場合)、その変数を生成する名前のリストを使用するか、トークン化を"${!HOST_@}"含まずに配列に直接割り当てることができます。compgengrep

関連情報