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

관련 정보