Nei*_*aft 3 bash shell environment-variables
在bash脚本中,我试图测试变量的存在.但无论我做什么,我的"if"测试都会返回true.这是代码:
ignored-deps-are-not-set () {
if [ -z "${ignored_deps+x}" ]
then
return 0
fi
return 1
}
ignored_deps=1
ignored-deps-are-not-set
echo "ignored-deps function returns: $?"
if [ ignored-deps-are-not-set ]
then
echo "variable is unset"
else
echo "variable exists"
fi
Run Code Online (Sandbox Code Playgroud)
这是写的输出:
ignored-deps function returns: 1
variable is unset
Run Code Online (Sandbox Code Playgroud)
当我注释掉设置了ignored_deps的行时的输出.
ignored-deps function returns: 0
variable is unset
Run Code Online (Sandbox Code Playgroud)
无论怎样,它都说这个变量没有设置.我错过了什么?
这一行:
if [ ignored-deps-are-not-set ]
Run Code Online (Sandbox Code Playgroud)
测试字符串'ignored-deps-not-set-set'是否为空.它返回true,因为该字符串不为空.它不执行命令(因此也不执行函数).
如果要测试是否设置了变量,请使用其中一种${variable:xxxx}符号.
if [ ${ignored_deps+x} ]
then echo "ignored_deps is set ($ignored_deps)"
else echo "ignored_deps is not set"
fi
Run Code Online (Sandbox Code Playgroud)
该${ignored_deps+x}符号的计算结果为x,如果$ignored_deps设置,即使它被设置为空字符串.如果您只想将它设置为非空值,那么也使用冒号:
if [ ${ignored_deps:+x} ]
then echo "ignored_deps is set ($ignored_deps)"
else echo "ignored_deps is not set or is empty"
fi
Run Code Online (Sandbox Code Playgroud)
如果要执行该函数(假设破折号在函数名中起作用),则:
if ignored-deps-are-not-set
then echo "Function returned a zero (success) status"
else echo "Function returned a non-zero (failure) status"
fi
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7614 次 |
| 最近记录: |