首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何检查环境变量是否存在并获取其值?

如何检查环境变量是否存在并获取其值?
EN

Stack Overflow用户
提问于 2016-09-02 23:55:14
回答 4查看 451K关注 0票数 327

我正在写一个shell脚本。在这个shell脚本中,我有一个变量,它要么接受默认值,要么接受环境变量值。但是,环境变量不一定要存在。

例如,假设在运行脚本之前,我执行了以下操作:

代码语言:javascript
复制
export DEPLOY_ENV=dev

如何告诉脚本搜索此环境变量,并将其值存储在脚本内的变量中。此外,我如何告诉脚本,如果此环境变量不存在,则存储一个默认变量?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2016-09-03 00:02:25

[ -z "${DEPLOY_ENV}" ]检查DEPLOY_ENV的长度是否等于零。这样你就可以运行:

代码语言:javascript
复制
if [[ -z "${DEPLOY_ENV}" ]]; then
  MY_SCRIPT_VARIABLE="Some default value because DEPLOY_ENV is undefined"
else
  MY_SCRIPT_VARIABLE="${DEPLOY_ENV}"
fi

# or using a short-hand version

[[ -z "${DEPLOY_ENV}" ]] && MyVar='default' || MyVar="${DEPLOY_ENV}"

# or even shorter use

MyVar="${DEPLOY_ENV:-default_value}"
票数 560
EN

Stack Overflow用户

发布于 2016-09-03 00:09:57

如果您不关心未设置的变量和具有空值的变量之间的区别,则可以使用默认值参数扩展:

代码语言:javascript
复制
foo=${DEPLOY_ENV:-default}

如果您确实关心差异,请去掉冒号

代码语言:javascript
复制
foo=${DEPLOY_ENV-default}

您还可以使用-v运算符来显式测试是否设置了参数。

代码语言:javascript
复制
if [[ ! -v DEPLOY_ENV ]]; then
    echo "DEPLOY_ENV is not set"
elif [[ -z "$DEPLOY_ENV" ]]; then
    echo "DEPLOY_ENV is set to the empty string"
else
    echo "DEPLOY_ENV has the value: $DEPLOY_ENV"
fi
票数 79
EN

Stack Overflow用户

发布于 2016-09-03 00:02:23

环境变量和脚本中的变量没有区别。在脚本被调用之前,环境变量只是在脚本之外定义的。从脚本的角度来看,变量就是变量。

您可以检查是否定义了变量:

代码语言:javascript
复制
if [ -z "$a" ]
then
    echo "not defined"
else 
    echo "defined"
fi

然后为未定义的变量设置默认值或执行其他操作。

-z检查长度为零(即空)的字符串。请参见man bash并查找条件表达式部分。

如果你不想让一个未定义的变量以创造性的方式破坏事情,你也可以在你的脚本的开头使用set -u,使它在遇到一个未定义的变量时失败。

票数 34
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39296472

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档