シェルの変数の変数を解析します。

シェルの変数の変数を解析します。

bashシェルで環境変数を使用し、次のことを行う必要があります。

  • echo $ENVDEVスタックに従ってまたはで解決されます。STAGEPRD
  • echo $DEV_ACCOUNT数字で解析しますecho $DEV_ACCOUNT12345678

echo $ENV_ACCOUNTで確認する必要があるコマンドに使用する必要がありますが、代わり12345678に確認されます。DEV_ACCOUNT12345678

私が使用するコマンドは次のとおりです。

aws events put-targets --rule {{ stack_name | lower }}-hello-world \
    --targets "Id"="1","Arn"="arn:aws:lambda:us-west-2:$ENV_ACCOUNT:function:hello-world"

代わりに$ENV_ACCOUNT解決されています。予想される出力は次のとおりです。DEV_ACCOUNT12345678

aws events put-targets --rule {{ stack_name | lower }}-hello-world \
    --targets "Id"="1","Arn"="arn:aws:lambda:us-west-2:12345678:function:hello-world"

私は何が間違っていましたか?

ベストアンサー1

大文字の変数名は一般的には安全ではありません。 $ENV例えば、多くの殻で特別です。これらのシェルでは、その値は特定の種類のシェルを開始する前にインポートするファイルのパス名でなければなりません。シェルはPOSIXモードで使用されますbash$ENV

したがってbash

declare -A account
account["develop"]=12345678
account["staging"]=9128312
account["production"]=123123

mode=$run_mode

aws events put-targets \
    --rule {{ stack_name | lower }}-hello-world \
    --targets "Id"="1","Arn"="arn:aws:lambda:us-west-2:${account[$mode]}:function:hello-wolrd"

accountこれにより、開発、準備、および生産モードに関するデータを保持する連想配列が設定されます。次に、使用中のパターンを定義し、配列の正しいデータでコマンドを実行しますaccount。変数は、文字列またはいずれかを含む環境変数と見なされrun_modeますdevelopstagingproduction

連想配列はbash4.0で導入されました。

aws私はあなたが書いたコマンドを使用しました(改行とaccount変数の追加を除く)。それはあなたが期待どおりに動作しないかもしれませんが(コマンドで実行しよう{{ stack_name | lower }}-hello-worldとします)。lowerわからないawsので、どう見えるかはわかりませんが、参考にすればいいようです。


アドレス指定mosvyユーザーの意見に関する懸念:変数DEV_ACCOUNTなどが環境変数の場合は、その内容に応じて正しい変数を選択する必要がありますENV

declare -A account
account["DEV"]=$DEV_ACCOUNT
account["STAGE"]=$STAGE_ACCOUNT
account["PRD"]=$PRD_ACCOUNT

mode=$ENV

# the rest as before

おすすめ記事