Bash は、すべての環境変数が変数名で宣言されていることを確認します。

Bash は、すべての環境変数が変数名で宣言されていることを確認します。

以下のスクリプトに問題があります。その名前に設定された変数がない場合にのみ終了する必要があります。

#!/bin/bash
set -e

echo 'START: env_vars_config'

required_var(){
  VARIABLE=$1
  echo "detecting if $VARIABLE exists"
  echo ${!VARIABLE}
  if [ -z ${!VARIABLE}+x ]; then
    echo "${VARIABLE} was defined"
  else
    echo "Need to set environment var $VARIABLE" && exit 1;
  fi
}

# these are required variables to deploy
required_var MONGO_URL
required_var AWS_REGION
required_var AUTOSCALING_GROUP_NAME
required_var LATEST_STABLE_COMMIT
required_var ENV_FILE
required_var DEPLOY_FILE
required_var POSTMAN_ENVIRONMENT_UID
required_var POSTMAN_COLLECTION_UID
required_var POSTMAN_API_KEY
required_var MANDRILL_KEY
required_var SERVER_SECRET
required_var S3_BUCKET
required_var ELASTIC_URL
required_var ELASTIC_PASSWORD
required_var ELASTIC_PREFIX


echo 'END: env_vars_config'

このスクリプトは常に最初のチェックで終了しますが、MONGO_URLこれが変数セットであり文字列であることがわかります。

  • 小切手はどのようにunset見えますか?
  • 小切手はどのようにunset見えますかempty string

安定 質問2つ、まず+if文の末尾にある記号のスペルエラーです。第二に、if文の順序を逆にしました。

  if [ -z "${!VARIABLE}" ]; then
    echo "Need to set environment var $VARIABLE" && exit 1;
  else
    echo "${VARIABLE} was defined"
  fi

答え1

問題は次のとおりです。

if [ -z ${!VARIABLE}+x ]; then
    echo "${VARIABLE} was defined"
else
    echo "Need to set environment var $VARIABLE" && exit 1;
fi

-z文字列が空の場合、「文字列」は真です。

+x太田ですか?そうする必要はありません。

労働条件:

if [ -z "${!VARIABLE}" ]; then
    echo "Need to set environment var $VARIABLE" && exit 1;
else
    echo "${VARIABLE} was defined"
fi

関連情報