这是一段更大的代码中的一行简单的代码,这正是我感到困惑的地方。
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