Bash 为什么我的算术条件被评估为真?

Bash 为什么我的算术条件被评估为真?,bash,shell,syntax,Bash,Shell,Syntax,我有一个逻辑示例。通过计算,它是-2>0。这是一个错误的条件,我没有得到任何结果,但我得到的值为abcd #!/bin/bash Val1=1 Val2=1 Val3=2 Name=abcd log=/tmp/log if [ "$((Val1-(Val2 + Val3))) -ge 0" ] ; then echo "$Name" | tee -a "$log"; fi 我已经在ShellCheck上进行了验证,它给了我这个消息。

我有一个逻辑示例。通过计算,它是
-2>0
。这是一个错误的条件,我没有得到任何结果,但我得到的值为
abcd

#!/bin/bash
Val1=1
Val2=1
Val3=2
Name=abcd
log=/tmp/log
if [ "$((Val1-(Val2 + Val3))) -ge 0" ] ; then echo "$Name"  | tee -a "$log"; fi
我已经在ShellCheck上进行了验证,它给了我这个消息。我不知道怎么解决这个问题

$ shellcheck myscript
 
Line 7:
if [ "$((Val1-(Val2 + Val3))) -ge 0" ] ; then echo "$Name"  | tee -a "$log"; fi
                             ^-- SC2157: Argument to implicit -n is always true due to literal strings.

我在发帖后想

#!/bin/bash
Val1=1
Val2=1
Val3=2
Name=abcd
log=/tmp/log
if [ "$((Val1-(Val2 + Val3)))" -ge 0 ] ; then echo "$Name"  | tee -a "$log"; fi

如果使用
['a string']
,这与
[-n'a string']
相同:它检查参数是否为非空。您正在提供参数
“$((Val1-(Val2+Va3))-ge 0”
,该参数的计算结果为字符串
“-2-ge 0”
。“Implicit
-n
”表示shell确实进行了检查

if[-n“-2-ge 0”]
这总是正确的,因为这不是一个空字符串

原因是你的引用。相反,这会起作用:

if[“$((Val1-(Val2+Val3))”-ge 0]
严格地说,引用是没有必要的,但它们也没有坏处

或者,由于您使用的是Bash,因此可以使用算术条件:

if((Val1-(Val2+Val3)>0))