Bash shell OR'ed字符串比较失败

时间:2014-06-13 18:37:02

标签: string bash

这类似于我用谷歌搜索的帖子,但我无法找到确切的答案。我试图比较两个字符串ORed与另外两个字符串比较:

elif [[ "$2" != "append" ]] || [[ "$2" != "replace" ]]

但即使键入了append或replace,测试也会失败。奇怪的是,单一的比较有效:

elif [[ "$2" != "append" ]]

所以我知道问题出在OR部分,但我无法解决问题。

3 个答案:

答案 0 :(得分:3)

使用&&代替||

elif [[ "$2" != "append" ]] && [[ "$2" != "replace" ]]

如果您使用||,则每个字符串都会通过测试。没有字符串等于appendreplace

  

如果$ 2既不是“追加”也不是“替换”,我正在寻找表达式来执行elif语句。

直接从英语翻译成代码有时会起作用,有时则不然。在这里它没有。你真的在寻找$2既没有“追加”NOR“替换”的检查。并且没有NOR运营商。有一个AND运算符,如:检查$2是否“追加”并且它不是“替换”。这是 可翻译的句子。

答案 1 :(得分:3)

调理可能是错误的。

[[ "$2" != "append" ]] || [[ "$2" != "replace" ]]永远都是真的。

如果[[ "$2" != "append" ]][[ $2 == replace ]]$2之外还有任何其他值,

append将始终为真。

答案 2 :(得分:0)

我还建议你把它放在括号内:

elif [[ $2 != 'append' && $2 != 'replace' ]]

或者你可以使用extglob来省略&&完全:

shopt -s extglob
...

elif [[ $2 != @(append|replace) ]]

看起来这正是你所期待的!

请注意,您不必在[[ ]]括号内引用左侧。