single 和 double 等于两者的行为不同

single 和 double 等于两者的行为不同

这是一段更大的代码中的一行简单的代码,这正是我感到困惑的地方。

if [ $some_line == "text" ]
then

然后我继续对我正在开发的另一个程序使用相同的代码,但代码不起作用,除非我将“==”更改为“=”。我在这里浏览了一些线程,表明它们的行为方式相同,因此使用单等号或双等号并不重要。

if [ $some_line = "text" ]
then

因此,第一段代码可以在 server1 上运行,但不能在 server2 上运行,除非我将其更改为“单个等于”。两台服务器的环境完全相同。

谁能解释一下吗?谢谢!

编辑 - 我每次都将脚本运行为“bash myscript.sh”。

答案1

==和在 中的测试=中是等效的。[ ]bash

==不起作用sh,仅=

您是否使用相同的 shell 运行这两个脚本?

例子:

$ cat test1
#!/bin/bash
if [ "a" == "a" ];then echo match;fi
$ ./test1
match
$ cat test2
#!/bin/bash
if [ "a" = "a" ];then echo match;fi
$ ./test2
match
$ cat test3
#!/bin/sh
if [ "a" = "a" ];then echo match;fi
$ ./test3
match
$ cat test4
#!/bin/sh
if [ "a" == "a" ];then echo match;fi
$ ./test4
./test4: 2  [: a: unexpected operator

相关内容