如何检查变量是否未设置并在bash prelude中使用set-u?
我知道如果引用了任何未绑定的变量,如何检查变量是否未设置并在bash prelude中使用set-u?,bash,variables,string,unset,Bash,Variables,String,Unset,我知道如果引用了任何未绑定的变量,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: SO
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
,所以我想知道的是,当我实际尝试使用未设置的变量(如将它们作为参数传递或对其应用字符串操作)时,脚本是否会失败,而不仅仅是在检查它们是否未设置时 您可以使用扩展:
if [ -z "${SOME_VARIABLE:-}" ]; then
echo '$SOME_VARIABLE' is not set
else
do_stuff_with_SOME_VARIABLE
fi
这会将$SOME_变量
扩展为null。阅读有关参数替换的更多信息(请参阅顶部附近的${parameter:-default}
部分)