形式为-[-n";${VAR:-x}";]的Bash条件即使设置了VAR也会得到计算

形式为-[-n";${VAR:-x}";]的Bash条件即使设置了VAR也会得到计算,bash,syntax,shell,environment-variables,Bash,Syntax,Shell,Environment Variables,我已经写了一份形式的if声明: if [ -n "${VAR:-x}" ]; then #do something export VAR=#something fi 我的shell脚本调用此语句两次,并且出乎意料地通过了两次条件 [提示(可能是…):此确切代码在包含文件的函数中重复。if语句在函数调用之前首先求值。在函数调用时“再次”求值。] 这里怎么了?我是否错误地理解了-x标志 谢谢 ${VAR:-x}表示如果未设置VAR,则替换字符串x,否则替换VAR的值 类似地,${FOO

我已经写了一份形式的if声明:

if [ -n "${VAR:-x}" ]; then
   #do something
   export VAR=#something
fi
我的shell脚本调用此语句两次,并且出乎意料地通过了两次条件

[提示(可能是…):此确切代码在包含文件的函数中重复。if语句在函数调用之前首先求值。在函数调用时“再次”求值。]

这里怎么了?我是否错误地理解了-x标志


谢谢

${VAR:-x}
表示如果未设置
VAR
,则替换字符串
x
,否则替换
VAR
的值

类似地,
${FOO:-bar}
表示如果未设置
FOO
,则替换
FOO
的值或字符串
bar


这意味着
-n“${VAR:-x}”
将始终为真,因为
-n
意味着检查是否为空,
“${VAR:-x}”
将永远不会为空。

${VAR:-x}
表示如果未设置
VAR
则替换字符串
x
,否则替换
VAR
的值

类似地,
${FOO:-bar}
表示如果未设置
FOO
,则替换
FOO
的值或字符串
bar


这意味着
-n“${VAR:-x}”
将始终为真,因为
-n
意味着检查是否为空,
“${VAR:-x}”
将永远不会为空。

那么我如何查询变量的存在性/非空性?只需-n“${VAR}”就可以了。如果VAR设置为非空,则为真。那么如何查询变量的存在性/非空性?只需-n“${VAR}”即可。如果VAR被设置为非空,这将是真的。我的想法来自:并且被误导了。也许这是我的错……我的想法来自:并且被误导了。也许这是我的错。。。