我试图在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中的[[ ]]
语法执行此操作?
答案 0 :(得分:4)
听起来你有一个想要运行的工具chkchroot
。您发布的代码不是在if语句中运行命令的方式。
要将[[ .. ]]
作为命令运行,请不要将其包含在if ! chkchroot || [[ $# -lt 1 ]]
then
echo "foo"
fi
:
chkchroot
Bash将您的-n chkchroot
解释为隐式questions_bank
(始终为true且不运行chkchroot)。 Zsh不允许这样做,这就是它抱怨的原因。它与括号无关。