关于unix:使用sh shell比较字符串

Compare a string using sh shell

本问题已经有最佳答案,请猛点这里访问。

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

下面是一些代码:

1
2
3
4
5
6
7
8
9
Sourcesystem="ABC"

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

echo Sourcesystem Value is  $Sourcesystem ;

即使这样也不行:

1
2
3
4
5
6
7
8
9
Sourcesystem="ABC"

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

echo Sourcesystem Value is  $Sourcesystem ;

其次,我们可以将其与空字符串匹配吗?


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

1
2
3
4
5
6
7
Sourcesystem="ABC"

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

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


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


eq用于比较整数,使用equal"=",例子:

1
2
3
4
5
6
if [ 'AAA' = 'ABC' ];
then
    echo"the same"
else
    echo"not the same"
fi

祝你好运


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

1
2
3
4
if [ 'xyz' = 'abc' ];
then
echo"match"
fi

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

查看"其他比较运算符"。


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


-eq是一个数学比较运算符。我从来没有把它用于字符串比较,依赖于==!=进行比较。

1
2
3
4
5
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


在我测试的4个外壳中,ABC -eq XYZzshkshtest内置中评估为真。该表达式在/usr/bin/test下为假,在dashbash下为内建。在kshzsh中,字符串被转换为数值,并且是相等的,因为它们都是0。在我看来,kshzsh的内置设备的行为是不正确的,但test的规格对此不明确。