使用sh shell比较字符串

Jam*_*ond 156 unix shell sh

我正在使用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 ;
Run Code Online (Sandbox Code Playgroud)

即使这不起作用:

Sourcesystem="ABC"

if [ 'XYZ' -eq "$Sourcesystem" ]; then 
    echo "Sourcesystem Matched" 
else
    echo "Sourcesystem is NOT Matched $Sourcesystem"  
fi;

echo Sourcesystem Value is  $Sourcesystem ;
Run Code Online (Sandbox Code Playgroud)

其次,我们可以将它与NULL或空字符串匹配吗?

Mit*_*dir 238

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

Sourcesystem="ABC"

if [ "$Sourcesystem" = "XYZ" ]; then 
    echo "Sourcesystem Matched" 
else
    echo "Sourcesystem is NOT Matched $Sourcesystem"  
fi;
Run Code Online (Sandbox Code Playgroud)

man test说你-z用来匹配空字符串.

  • 如果您的变量中可能包含空格,则需要引用. (23认同)
  • 不必引用“ ABC”或“ XYZ”。 (2认同)
  • 对于传递的参数似乎无效,即$ 1 (2认同)

Pio*_*zmo 62

-eq用于比较整数.请=改用.

  • 并注意不要使用双等号“==” (9认同)

小智 26

eq用于比较整数使用等于'=',例如:

if [ 'AAA' = 'ABC' ];
then 
    echo "the same" 
else 
    echo "not the same"
fi
Run Code Online (Sandbox Code Playgroud)

祝好运

  • 注意:如果您要比较变量,请确保使用“$VAR”而不是简单的“$VAR” (4认同)

Esw*_*nti 16

我有同样的问题,这样做

if [ 'xyz' = 'abc' ];
then
echo "match"
fi
Run Code Online (Sandbox Code Playgroud)

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

查看" 其他比较运算符 ".

  • 在 Dockerfile: /bin/sh: 1: [: =: 意外的操作符 (2认同)

cod*_*ict 8

-eq是用于比较整数的shell比较运算符.用于比较您需要使用的字符串=.


Jas*_*son 5

-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
Run Code Online (Sandbox Code Playgroud)

  • 请注意,运算符`==`不适用于每个shell.`=`是用于比较字符串的正确运算符,`==`有时是同义词. (14认同)