7

我知道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设置时使用,所以我想知道的是,当我实际尝试使用未设置的变量时(例如将它们传递为参数或对其应用字符串操作)但不是当我只是检查它们是否未设置时?

4

1 回答 1

9

您可以使用扩展:

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

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

于 2013-07-23T16:27:14.063 回答