我使用SH shell,我试图比较一个字符串与变量的值,但if条件总是执行为真。为什么?

下面是一些代码:

Sourcesystem="ABC"

if [ "$Sourcesystem" -eq 'XYZ' ]; then 
    echo "Sourcesystem Matched" 
else
    echo "Sourcesystem is NOT Matched $Sourcesystem"  
fi;

echo Sourcesystem Value is  $Sourcesystem ;

即使这样也行不通:

Sourcesystem="ABC"

if [ 'XYZ' -eq "$Sourcesystem" ]; then 
    echo "Sourcesystem Matched" 
else
    echo "Sourcesystem is NOT Matched $Sourcesystem"  
fi;

echo Sourcesystem Value is  $Sourcesystem ;

其次,我们可以用NULL或空字符串来匹配它吗?


当前回答

-eq是一个数学比较运算符。我从未将它用于字符串比较,依赖于==和!=进行比较。

if [ 'XYZ' == 'ABC' ]; then   # Double equal to will work in Linux but not on HPUX boxes it should be if [ 'XYZ' = 'ABC' ] which will work on both
  echo "Match"
else
  echo "No Match"
fi

其他回答

Eq用于比较整数,使用equal '='代替, 例子:

if [ 'AAA' = 'ABC' ];
then 
    echo "the same" 
else 
    echo "not the same"
fi

祝你好运

-eq用于比较整数。用=代替。

你应该使用=运算符进行字符串比较:

Sourcesystem="ABC"

if [ "$Sourcesystem" = "XYZ" ]; then 
    echo "Sourcesystem Matched" 
else
    echo "Sourcesystem is NOT Matched $Sourcesystem"  
fi;

Man测试说您使用-z来匹配空字符串。

-eq是用于比较整数的shell比较运算符。对于比较字符串,您需要使用=。

在我测试的4个shell中,ABC -eq XYZ在zsh和ksh的内置测试中评估为真。在/usr/bin/test和dash和bash的内置中,表达式的计算结果为false。在ksh和zsh中,字符串被转换为数值,并且相等,因为它们都是0。在我看来,ksh和zsh的内置程序的行为是不正确的,但是测试的规范在这方面是模糊的。