在zsh中使用[[]]时如何对条件表达式进行分组
我试图在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 \
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在语法上正确,但在语义上不正确。