3

我最近更新到 Ubuntu 13.04,我的一个 shell 脚本与此中断:

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

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

现在,我知道我可以通过用单个等号 ('=') 替换双等号 ('==') 来解决这个问题,但是是什么导致 13.04 和以前的 Ubuntu 版本之间的 Ubuntu 行为出现这种差异?有没有办法恢复以前版本的更灵活的解释?

4

2 回答 2

3

/bin/sh(不是/bin.sh您的帖子中写的)曾经链接到/bin/bash,但现在链接到/bin/dashUbuntu 上。即使被称为 sh,bash 也能容忍一些 bashism。

于 2013-08-20T17:21:00.643 回答
1

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

编辑:由于您使用sh==是,所以永远不正确;您只是对系统设置的某些特定特征感到幸运。

于 2013-08-20T17:14:27.817 回答