使用sh shell比较字符串

我使用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或空字符串来匹配它吗?

542378 次浏览

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

你应该使用=操作符进行字符串比较:

Sourcesystem="ABC"


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

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

-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是用于比较整数的shell比较操作符。为了比较字符串,你需要使用=

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

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

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

注意这些空白。在这种情况下,在=符号之后和之前使用空格是很重要的。

查看“其他比较操作符"”。

eq用于比较整数,使用equal '='代替, 例子:< / p >

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

祝你好运