这类似于我用谷歌搜索的帖子,但我无法找到确切的答案。我试图比较两个字符串ORed与另外两个字符串比较:
elif [[ "$2" != "append" ]] || [[ "$2" != "replace" ]]
但即使键入了append或replace,测试也会失败。奇怪的是,单一的比较有效:
elif [[ "$2" != "append" ]]
所以我知道问题出在OR部分,但我无法解决问题。
答案 0 :(得分:3)
使用&&
代替||
。
elif [[ "$2" != "append" ]] && [[ "$2" != "replace" ]]
如果您使用||
,则每个字符串都会通过测试。没有字符串等于append
和replace
。
如果$ 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) ]]
看起来这正是你所期待的!
请注意,您不必在[[ ]]
括号内引用左侧。