如何检查变量是不是未设置并在我的 bash 前奏中使用 set -u? [复制]

Posted

技术标签:

【中文标题】如何检查变量是不是未设置并在我的 bash 前奏中使用 set -u? [复制]【英文标题】:How do I check if a variable is unset AND use set -u in my bash prelude? [duplicate]如何检查变量是否未设置并在我的 bash 前奏中使用 set -u? [复制] 【发布时间】:2013-07-22 20:08:38 【问题描述】:

我知道如果引用了任何未绑定的变量,set -u 将使脚本失败,但在我的 bash 脚本中,我在尝试执行某些操作之前检查 if 语句中是否未设置某个变量它,像这样:

if [[ -z "$SOME_VARIABLE" ]] ; then
    echo '$SOME_VARIABLE' is not set
else
    do_stuff_with_SOME_VARIABLE
fi

但是,如果我尝试在前奏中使用 set -eu 运行上述内容,则会收到以下错误,考虑到我正在尝试做的事情,这似乎有点违反直觉:

-bash: SOME_VARIABLE: unbound variable

[Process completed]

如您所见,我实际上并没有在未设置时尝试使用 $SOME_VARIABLE,所以我想知道的是,当我实际尝试使用未设置时,是否有某种方法使脚本失败变量(比如将它们作为参数传递或对它们应用字符串操作)但不是当我只是检查它们是否未设置时?

【问题讨论】:

【参考方案1】:

你可以使用扩展:

if [ -z "$SOME_VARIABLE:-" ]; then
    echo '$SOME_VARIABLE' is not set
else
    do_stuff_with_SOME_VARIABLE
fi

这会将$SOME_VARIABLE 扩展为空。阅读有关参数替换的更多信息 here(请参阅顶部附近的 $parameter:-default 部分)

【讨论】:

以上是关于如何检查变量是不是未设置并在我的 bash 前奏中使用 set -u? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

在bash中取消设置变量检查

如何判断字符串是不是未在 Bash shell 脚本中定义

Bash条件表达式(-v)检查是不是设置了变量[重复]

bash 命令检查目录是不是可执行

环境变量未显示在`printenv`中

如何在Mac OS上设置多个env home变量?