Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何检查变量是否未设置并在bash prelude中使用set-u?_Bash_Variables_String_Unset - Fatal编程技术网

如何检查变量是否未设置并在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}
部分)