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

在zsh中使用[[]]时如何对条件表达式进行分组,zsh,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 \

我试图在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中的
[[]]
语法有什么方法可以做到这一点吗?

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

要作为命令运行
chkchroot
,请不要将其包含在
[[…]]
中:

if ! chkchroot || [[ $# -lt 1 ]]
then
  echo "foo"
fi

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

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

要作为命令运行
chkchroot
,请不要将其包含在
[[…]]
中:

if ! chkchroot || [[ $# -lt 1 ]]
then
  echo "foo"
fi

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

您的POSIX在语法上正确,但在语义上不正确。您的POSIX在语法上正确,但在语义上不正确。