是什么原因导致shell脚本中=和==的解释不同?

时间:2013-08-20 17:11:02

标签: linux shell ubuntu

我最近更新到Ubuntu 13.04,我的一个shell脚本打破了这个:

#!/bin/sh    
...
if [ "$SHOW_USAGE" == "true" ]; then

./install.sh: 248: [: false: unexpected operator

现在,我明白我可以通过将double-equal('==')替换为单个等号('=')来解决这个问题,但是导致13.04和之前的Ubuntu版本之间的Ubuntu行为有什么不同?有没有办法恢复以前版本更灵活的解释?

2 个答案:

答案 0 :(得分:3)

/bin/sh(不是/bin.sh在您的帖子中写的)过去曾与/bin/bash相关联,但现在已与Ubuntu上的/bin/dash相关联。即使被称为sh,bash也会容忍一些基本原理。

答案 1 :(得分:1)

如果您不介意要求bash运行您的脚本,则可以使用bash [[而不是尝试使用[。有一些不同的行为,但[[确实支持==运算符,而[从不拥有(除了可能作为特定系统的扩展名)。

修改:由于您正在使用sh,因此== 永远不会正确;您只是幸运地获得了系统设置的一些特殊功能。