这个问题已经在这里有一个答案:
- 如何比较字符串中的Bash 10个回答
- 如何在猛砸一个“如果”语句比较两个字符串变量? [重复] 12个答案
我使用的SH壳,我试图来比较变量值的字符串,但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或空字符串相匹配呢?
您应该使用=
字符串比较操作:
Sourcesystem="ABC"
if [ "$Sourcesystem" = "XYZ" ]; then
echo "Sourcesystem Matched"
else
echo "Sourcesystem is NOT Matched $Sourcesystem"
fi;
man test
说,你用-z
以匹配空字符串。
当量是用于比较使用整数等于“=”代替,例如:
if [ 'AAA' = 'ABC' ];
then
echo "the same"
else
echo "not the same"
fi
祝好运
我有同样的问题,这样做
if [ 'xyz' = 'abc' ];
then
echo "match"
fi
注意空格。 您使用空格在这种情况下,之后和之前是很重要的=
标志。
退房“ 其它比较运算符 ”。
-eq
是比较整数壳比较操作。 对于比较字符串,你需要使用=
。
-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
我已经测试了4弹, ABC -eq XYZ
计算结果为真在test
内置的zsh
和ksh
。 该表达式评估为假下/usr/bin/test
和用于建宏dash
和bash
。 在ksh
和zsh
,该字符串被转换为数字值并等于因为它们都是0 IMO,所述内建为的行为ksh
和zsh
是不正确的,但对于该规范test
是不明确这一点。