我最近更新到Ubuntu 13.04,我的一个shell脚本打破了这个:
#!/bin/sh
...
if [ "$SHOW_USAGE" == "true" ]; then
./install.sh: 248: [: false: unexpected operator
现在,我明白我可以通过将double-equal('==')替换为单个等号('=')来解决这个问题,但是导致13.04和之前的Ubuntu版本之间的Ubuntu行为有什么不同?有没有办法恢复以前版本更灵活的解释?
答案 0 :(得分:3)
/bin/sh
(不是/bin.sh
在您的帖子中写的)过去曾与/bin/bash
相关联,但现在已与Ubuntu上的/bin/dash
相关联。即使被称为sh,bash也会容忍一些基本原理。
答案 1 :(得分:1)
如果您不介意要求bash
运行您的脚本,则可以使用bash [[
而不是尝试使用[
。有一些不同的行为,但[[
确实支持==
运算符,而[
从不拥有(除了可能作为特定系统的扩展名)。
修改:由于您正在使用sh
,因此==
永远不会正确;您只是幸运地获得了系统设置的一些特殊功能。