在哪里否定bash中的逻辑表达式

时间:2016-04-07 14:26:24

标签: bash

如果要组合多个测试,如何否定bash中的测试?

代码是

if ! [ $(pgrep Xvfb) ] || [ ! -v DISPLAY ]; then
    echo starting xvfb
    mkdir -p /tmp/xvfb
    Xvfb :1 -fbdir /tmp/xvfb > /tmp/xvfb_output 2>&1 &
    export DISPLAY=:1
fi

它应该是源代码并且如果尚未运行则启动Xvfb。 以前,它缺少|| [ ! -v DISPLAY ]部分来检查所述变量是否存在。

要取消测试,您可以执行! [ ... ][ ! ... ],这两项似乎都有效。

推理是否正确,你应该使用[ ! ...],因为它在测试中并因此更清晰(并且效率更高)?

1 个答案:

答案 0 :(得分:1)

我非常确定你在效率方面放弃否定并不重要。至于可读性,您可以像这样编写if语句:

if ! (test "$(pgrep Xvfb)" -a -n "${DISPLAY:+1}"); then

这样你在一次测试中只有一次否定。

我同意你的意见

if ! [ $(pgrep Xvfb) ] || [ ! -v DISPLAY ]; then

含糊不清

if [ ! $(pgrep Xvfb) ] || [ ! -v DISPLAY ]; then

不是。