比较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 XYZ
在zsh
和ksh
内置test
评估为true。 expression式在/usr/bin/test
下计算为false,为dash
和bash
内build值。 在ksh
和zsh
,string被转换为数值,并且都是相等的,因为它们都是0. IMO, ksh
和zsh
的内置函数的行为是不正确的,但是test
规范在这个上是不明确的。