使用sh shell比较字符串

时间:2012-06-01 11:20:42

标签: shell unix sh

我正在使用SH shell,我正在尝试将字符串与变量的值进行比较,但if条件始终执行为true。为什么呢?

以下是一些代码:

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或空字符串匹配吗?

7 个答案:

答案 0 :(得分:218)

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

Sourcesystem="ABC"

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

man test表示您使用-z来匹配空字符串。

答案 1 :(得分:58)

-eq用于比较整数。请改用=

答案 2 :(得分:21)

eq用于比较整数使用等于'=', 例如:

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

答案 3 :(得分:15)

我有同样的问题,请这样做

if [ 'xyz' = 'abc' ];
then
echo "match"
fi

注意空格。在这种情况下,在=符号之前和之前使用空格非常重要。

查看“Other Comparison Operators”。

答案 4 :(得分:8)

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

答案 5 :(得分:7)

-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

答案 6 :(得分:3)

在我测试的4个shell中,ABC -eq XYZtest内置zshksh时评估为true。表达式在/usr/bin/test下评估为false,dashbash的内置结构评估为false。在kshzsh中,字符串会转换为数字值并且相等,因为它们都是0. IMO,kshzsh内置函数的行为不正确,但test的规范在这方面含糊不清。