bash字符串相等

bri*_*gge 122 bash equality equals

bash,等于和双等测试运算符之间有什么区别?

[[ "a" = "a" ]] && echo equal || echo not-equal
[[ "a" == "a" ]] && echo equal || echo not-equal
[[ "a" = "b" ]] && echo equal || echo not-equal
[[ "a" == "b" ]] && echo equal || echo not-equal
Run Code Online (Sandbox Code Playgroud)

结果是:

equal
equal
not-equal
not-equal
Run Code Online (Sandbox Code Playgroud)

sch*_*der 118

没有区别,===(对于C/C++人,我假设)的同义词.例如,请参见此处.

你可以仔细检查,只是要真正确保或只是通过看你的兴趣bash的源代码,应该是某处解析代码,但我不能直截了当找到它.

  • *string*比较没有区别,但你不能在`(())`中使用`=`进行数值比较(你必须在`(())`或`-eq`中使用`==` []`,`test`或`[[]]`.请参阅我的回答[这里](http://stackoverflow.com/questions/2600281/what-is-the-difference-between-operator-and-in-庆典/ 2601583#2601583). (24认同)
  • 值得注意的是,= b是在bash中引入的,但是bourne shell不支持它.在某些系统中,您会注意到/ bin/sh实际上是bash,而在其他系统中,它是bourne.当shell脚本在多个系统上正常工作时遇到了这个问题,但是在一个系统上失败了./ =在bourne中不受支持是它失败的原因. (24认同)
  • 请注意,在ksh中,如果检查语法,则会使用single =语法获得折旧警告.`警告:第3行:'='过时,使用'=='` (4认同)
  • IN BASH没有区别.`==`不适用于所有shell,因此不可移植.首选`=`. (3认同)