如何在利用短路的同时进行涉及管道命令返回值的逻辑测试?

时间:2013-07-15 06:47:36

标签: bash

这是我正在努力做的代码,但我知道它在逻辑上是不正确的,因为!仅绑定到第一个测试。

# if Vim was compiled in the same month, skip.
if ! [[ -f /usr/local/bin/vim ]] && /usr/local/bin/vim --version | grep "compiled $(date +%b) [0-9]{1,2} $(date +%Y) " -

我知道它在逻辑上是错误的原因是:

$ if ! [[ a == b ]] && [[ c == c ]]; then echo yy; fi
yy

$ if ! [[ a == a ]] && [[ a == c ]]; then echo yy; fi

$

2 个答案:

答案 0 :(得分:1)

我认为解决方案是使用curlies:

$ if ! { [[ a == a ]] && [[ a == c ]]; }; then echo yy; fi
yy

我想知道是否有更优雅的东西。

答案 1 :(得分:1)

if [[ a != a ]] || [[ a != c ]]; then echo yy; fi

或:

if ! /usr/local/bin/vim --version 2> /dev/null | grep "compiled ...