如何在zsh中使用[[]]时对条件表达式进行分组

时间:2016-02-24 19:33:17

标签: zsh

我试图在zsh中对条件表达式进行分组。

if [[ ( ! chkchroot ) || ( $# -lt 1 ) ]]; then
    echo "usage: $0 [command]"
    echo "       run this inside a chroot"
    return 1
fi

然而,这会因解析错误而失败。这里,chkchroot是一个shell函数。

在纯POSIX中,可以做到这一点。

if [ \( ! chkchroot \) -o \( $# -lt 1 \) ]; then
    echo "usage: $0 [command]"
    echo "       run this inside a chroot"
    return 1
fi

有没有办法可以使用zsh中的[[ ]]语法执行此操作?

1 个答案:

答案 0 :(得分:4)

听起来你有一个想要运行的工具chkchroot。您发布的代码不是在if语句中运行命令的方式。

要将[[ .. ]]作为命令运行,请不要将其包含在if ! chkchroot || [[ $# -lt 1 ]] then echo "foo" fi

chkchroot

Bash将您的-n chkchroot解释为隐式questions_bank(始终为true且运行chkchroot)。 Zsh不允许这样做,这就是它抱怨的原因。它与括号无关。