Bash -eq和==,差异是什么?

时间:2014-04-15 14:24:33

标签: linux bash

为什么会这样:

Output=$( tail --lines=1 $fileDiProva )
##[INFO]Output = "OK"

if [[ $Output == $OK ]]; then
    echo "OK"
else
    echo "No Match"
fi

这不是吗?

Output=$( tail --lines=1 $fileDiProva )
##[INFO]Output = "OK"

if [[ $Output -eq $OK ]]; then
    echo "OK"
else
    echo "No Match"
fi

有什么区别?在==和-eq之间?

谢谢!

3 个答案:

答案 0 :(得分:5)

-eq是算术测试。

您正在比较字符串。

来自help test

Other operators:

  arg1 OP arg2   Arithmetic tests.  OP is one of -eq, -ne,
                 -lt, -le, -gt, or -ge.

当您使用[[并使用-eq作为运算符时,shell会尝试评估LHS和RHS。以下示例将解释它:

$ foo=something
+ foo=something
$ bar=other
+ bar=other
$ [[ $foo -eq $bar ]] && echo y
+ [[ something -eq other ]]
+ echo y
y
$ something=42
+ something=42
$ [[ $foo -eq $bar ]] && echo y
+ [[ something -eq other ]]
$ other=42
+ other=42
$ [[ $foo -eq $bar ]] && echo y
+ [[ something -eq other ]]
+ echo y
y

答案 1 :(得分:0)

查看this explanation of if

第一个==位于字符串比较运算符的部分,它只能比较两个字符串。

第二个-eq位于最后一部分ARG1 OP ARG2(最后一个),其文档说明"ARG1" and "ARG2" are integers

答案 2 :(得分:0)

-eq-lt-gt仅用于算术值比较(整数)。

==用于字符串比较。