我有一个bash变量深度,我想测试它是否等于0。如果是,我想停止执行脚本。到目前为止,我有:
zero=0;
if [ $depth -eq $zero ]; then
echo "false";
exit;
fi
不幸的是,这会导致:
[: -eq: unary operator expected
(由于翻译原因,可能有点不准确)
请问,我如何修改我的脚本让它工作?
我有一个bash变量深度,我想测试它是否等于0。如果是,我想停止执行脚本。到目前为止,我有:
zero=0;
if [ $depth -eq $zero ]; then
echo "false";
exit;
fi
不幸的是,这会导致:
[: -eq: unary operator expected
(由于翻译原因,可能有点不准确)
请问,我如何修改我的脚本让它工作?
当前回答
试一试:
zero=0;
if [[ $depth -eq $zero ]]; then
echo "false";
exit;
fi
其他回答
具体来说:((深度))。以示例为例,输出如下:1。
declare -i x=0
((x)) && echo $x
x=1
((x)) && echo $x
看起来你的深度变量没有设置。这意味着在bash将变量的值替换到表达式中之后,表达式[$depth -eq $zero]变成了[-eq 0]。这里的问题是-eq操作符被错误地用作只有一个参数(0)的操作符,但它需要两个参数。这就是为什么您会得到一元运算符错误消息。
编辑:正如J博士在他对这个答案的评论中提到的,避免检查中未设置变量的问题的安全方法是将变量括在“”中。详见他的评论。
if [ "$depth" -eq "0" ]; then
echo "false";
exit;
fi
与[命令一起使用的未设置变量在bash中显示为空。你可以使用下面的测试来验证这一点,因为xyz要么是空的,要么是未设置的,所有的测试都为真:
If [-z];然后回声“true”;否则返回“false”;fi xyz = " ";If [-z "$xyz"];然后回声“true”;否则返回“false”;fi 未设置的xyz;If [-z "$xyz"];然后回声“true”;否则返回“false”;fi
试一试:
zero=0;
if [[ $depth -eq $zero ]]; then
echo "false";
exit;
fi
你可以试试这个:
: ${depth?"Error Message"} ## when your depth variable is not even declared or is unset.
注意:这里是?在深度。
or
: ${depth:?"Error Message"} ## when your depth variable is declared but is null like: "depth=".
注意:这里是:?在深度。
在这里,如果发现变量depth为空,它将打印错误消息,然后退出。
你也可以使用这种格式,使用比较运算符,比如'==' '<='
if (( $total == 0 )); then
echo "No results for ${1}"
return
fi