5

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

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

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

上面的 if 语句在 bash 和 sh 中都运行良好。我只是想知道他们之间有什么区别吗?谢谢...

4

2 回答 2

9

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

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

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

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

如果 $var 恰好为 null / 空,​​那么这就是脚本所看到的:

if [ == "hello" ]; then

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

于 2012-10-18T06:42:11.207 回答
1

它们在算术评估方面不同

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

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

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

(( var = 3 ))有效(分配),但这总是评估为 TRUE

于 2012-10-18T07:35:58.227 回答