【发布时间】:2017-02-06 21:19:49
【问题描述】:
FROM_PROJECT=false
if [[ -z $INV_NAME ]]; then
if [[ -z $PRO_NAME ]]; then
echo "error: variable not set" >&2
exit 1
elif [[ -z $INV_FILE ]]; then
echo "error: variable INV not set" >&2
exit 1
fi
FROM_PRO=true
elif [[ -n $PRO_NAME ]] || [[ -n $INV_FILE ]]; then
echo "error: variable INV_NAME is not compatible with PRO_NAME and INVENTORY_FILE" >&2
exit 1
我不确定这些“-z”和“-n”在这里做什么?
【问题讨论】:
-
explainshell.com 会给你解释任何一行shell;
[[ -z $INV_NAME ]]或[[ -n $PRO_NAME ]]可以在那里使用。 -
顺便说一句,使用
true和false字符串作为条件是非常糟糕的做法。这样做的代码通常也会执行类似if $FROM_PROJECT; then ...的操作,从而执行半任意代码执行(如果您的变量的内容可以被赋予任意值,则添加一些需要安全审查检查的内容)。相反,请使用空/非空状态来确定布尔值。 -
(也可以很容易地将
0和1用作布尔值;如果some_value持有一个正整数值,或者它本身持有的变量的名称,if (( some_value ))将是真实的一个正整数值)。 -
@CharlesDuffy - 仅供参考,explainshell.com barfs on
[[ -z $INV_NAME ]]“解析错误!意外令牌'-z'(位置 3)”