bash或sh中'='和'=='运算符之间是否有任何区别?

时间:2012-10-18 06:31:44

标签: linux bash shell operators

我意识到'='和'=='运算符都适用于if语句。例如:

var="some string"
if [ "$var" == "some string" ];then
    #doing something
fi

if [ "$var" = "some string" ];then
    #doing something
fi

如果上面的声明在bash和sh中运行良好。我只是想知道它们之间是否有任何区别?感谢...

2 个答案:

答案 0 :(得分:6)

在条件测试的单个括号内(即[...]),所有shell都支持single =,而某些较旧的shell不支持==。

用于条件测试的双括号内(即[[...]]),旧壳或新壳没有区别。

编辑:我还应该注意:如果可能的话,始终使用双括号[[...]],因为它比单个括号更安全。我将通过以下示例说明原因:

if [ $var == "hello" ]; then

如果$ var恰好为null / empty,那么这就是脚本看到的内容:

if [ == "hello" ]; then

会破坏你的脚本。解决方案是使用双括号,或者始终记住在变量周围加上引号(" $ var")。双括号是更好的防御性编码实践。

答案 1 :(得分:0)

他们在算术评估方面有所不同

在双括号内,=不能用于比较,而==可以正常工作,例如。

(( $var == 3 ))工作正常

(( $var = 3 ))给出错误(比较)。

(( var = 3 ))有效(赋值),但总是计算为TRUE