检查bash变量是否等于0



我有一个bash变量深度,我想测试它是否等于0。如果是的,我想停止执行脚本。到目前为止,我有:

zero=0;
if [ $depth -eq $zero ]; then
    echo "false";
    exit;
fi

不幸的是,这导致:

 [: -eq: unary operator expected

(由于翻译而可能有点不准确)

请,如何修改脚本以使其正常工作?

看起来您的depth变量是未设置的。这意味着表达式[ $depth -eq $zero ]在bash将变量的值替换为表达式后变为 [ -eq 0 ]。这里的问题在于,-eq运算符被错误地用作一个只有一个参数(零)的操作员,但需要两个参数。这就是为什么您获得 Unary操作员错误消息。

编辑:作为 doktor j 在他对此答案的评论中提到的,这是避免检查中变量不设的问题的安全方法,就是将变量包装在""中。请参阅他的解释评论。

if [ "$depth" -eq "0" ]; then
   echo "false";
   exit;
fi

[命令使用的一个未设置变量似乎是空的。您可以使用以下测试对此进行验证,所有测试都对true进行了评估,因为xyz是空的或未设置的:

  • if [ -z ] ; then echo "true"; else echo "false"; fi
  • xyz=""; if [ -z "$xyz" ] ; then echo "true"; else echo "false"; fi
  • unset xyz; if [ -z "$xyz" ] ; then echo "true"; else echo "false"; fi

双括号(( ... ))用于算术操作。

双方括号[[ ... ]]可用于比较和检查数字(仅支持整数)与以下操作员:

· NUM1 -eq NUM2 returns true if NUM1 and NUM2 are numerically equal.
· NUM1 -ne NUM2 returns true if NUM1 and NUM2 are not numerically equal.
· NUM1 -gt NUM2 returns true if NUM1 is greater than NUM2.
· NUM1 -ge NUM2 returns true if NUM1 is greater than or equal to NUM2.
· NUM1 -lt NUM2 returns true if NUM1 is less than NUM2.
· NUM1 -le NUM2 returns true if NUM1 is less than or equal to NUM2.

例如

if [[ $age > 21 ]] # bad, > is a string comparison operator
if [ $age > 21 ] # bad, > is a redirection operator
if [[ $age -gt 21 ]] # okay, but fails if $age is not numeric
if (( $age > 21 )) # best, $ on age is optional

尝试:

zero=0;
if [[ $depth -eq $zero ]]; then
  echo "false";
  exit;
fi

您也可以使用此格式并使用比较操作员,例如'==''''< ='

  if (( $total == 0 )); then
      echo "No results for ${1}"
      return
  fi

具体: ((depth))。例如,以下打印1

declare -i x=0
((x)) && echo $x
x=1
((x)) && echo $x

您可以尝试以下方法:

: ${depth?"Error Message"} ## when your depth variable is not even declared or is unset.

注意:这只是depth之后的?

: ${depth:?"Error Message"} ## when your depth variable is declared but is null like: "depth=". 

注意:这是:?之后的CC_18。

在此处找到变量depth null它将打印错误消息,然后退出。

相关内容

  • 没有找到相关文章

最新更新