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))