用sh外壳比较字符串[复制](Compare a string using sh shell [du

2019-06-25 02:05发布

这个问题已经在这里有一个答案:

  • 如何比较字符串中的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或空字符串相匹配呢?

Answer 1:

您应该使用=字符串比较操作:

Sourcesystem="ABC"

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

man test说,你用-z以匹配空字符串。



Answer 2:

-eq用来比较整数。 使用=代替。



Answer 3:

当量是用于比较使用整数等于“=”代替,例如:

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

祝好运



Answer 4:

我有同样的问题,这样做

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

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

退房“ 其它比较运算符 ”。



Answer 5:

-eq是比较整数壳比较操作。 对于比较字符串,你需要使用=



Answer 6:

-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


Answer 7:

我已经测试了4弹, ABC -eq XYZ计算结果为真在test内置的zshksh 。 该表达式评估为假下/usr/bin/test和用于建宏dashbash 。 在kshzsh ,该字符串被转换为数字值并等于因为它们都是0 IMO,所述内建为的行为kshzsh是不正确的,但对于该规范test是不明确这一点。



文章来源: Compare a string using sh shell [duplicate]
标签: shell unix sh