比较Unix中的一个string

我正在使用SHshell,我想比较一个string与variables的值,但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或空string?

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

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

man test说你用-z来匹配空string。

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

我有同样的问题,这样做

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

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

检查“ 其他比较运算符 ”。

-eq是一个math比较运算符。 我从来没有用它来比较string,依靠==!=进行比较。

 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比较运算符。 为了比较string,你需要使用=

eq用于比较整数使用相等的“=”代替,例如:

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

祝你好运

在我testing的4个shell中, ABC -eq XYZzshksh内置test评估为true。 expression式在/usr/bin/test下计算为false,为dashbash内build值。 在kshzsh ,string被转换为数值,并且都是相等的,因为它们都是0. IMO, kshzsh的内置函数的行为是不正确的,但是test规范在这个上是不明确的。