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_this
(HOST_that
前に固定部分がある場合)、その変数を生成する名前のリストを使用するか、トークン化を"${!HOST_@}"
含まずに配列に直接割り当てることができます。compgen
grep