我正在使用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或空字符串匹配吗?
答案 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
注意空格。在这种情况下,在=
符号之前和之前使用空格非常重要。
答案 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 XYZ
在test
内置zsh
和ksh
时评估为true。表达式在/usr/bin/test
下评估为false,dash
和bash
的内置结构评估为false。在ksh
和zsh
中,字符串会转换为数字值并且相等,因为它们都是0. IMO,ksh
和zsh
内置函数的行为不正确,但test
的规范在这方面含糊不清。