Bash字符串相等性

140
bash 中,等号和双等号测试运算符有什么区别(如果有的话)?

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

结果是:

equal
equal
not-equal
not-equal
1个回答

131

没有区别,===的同义词(对于C/C++人来说,我假设)。例如,可以在这里查看。

你可以进行双重检查以确保无误或者出于兴趣查看bash源代码,应该在解析代码中的某个地方,但我没能立即找到。


26
对于字符串比较没有区别,但是在(())中无法使用=进行数字比较(必须在(())中使用==或在[]test[[]]中使用-eq。请参见我在这里的回答:https://dev59.com/6XE85IYBdhLWcg3wzm5p#2601583。 - Dennis Williamson
24
值得注意的是,== 运算符在 bash 中被引入,但是 bourne shell 不支持它。在某些系统中,你会发现 /bin/sh 实际上是 bash,而在其他系统中,则是 bourne。我曾经遇到这样一个问题,当一个脚本在多个系统上正常工作时,在另一个系统上却失败了。原因是 bourne shell 不支持 == 运算符。 - Joe
4
请注意,在ksh中如果您检查语法,使用单个=语法会获得一个已弃用的警告。 warning: line 3: '=' obsolete, use '==' - brianegge
6
在BASH中没有区别。 ==在某些Shell中不起作用,因此不具有可移植性。建议使用= - mak
正如@mak所指出的那样,在所有shell中都不能使用==,我在Ubuntu 16.04中确认了这一点。 - Yingpei Zeng

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接