If statement 为什么不能在zsh的双括号内使用read-q?

If statement 为什么不能在zsh的双括号内使用read-q?,if-statement,zsh,If Statement,Zsh,我的.zshrc中有以下内容: 注释掉的部分是有效的,但我更喜欢一行,所以我尝试使用不太详细的表单。为什么它不起作用 我得到/Users/brandon/.zshrc:62:解析错误:预期条件:读取。[[专门用于计算表达式,而不是返回代码。if变量的一行等效值为isa: 如果您的If变体类似于: if [[ something-or-other ]] ; then blah fi 然后在单行程序中使用[[1]: [[ something-or-other ]] && b

我的.zshrc中有以下内容:

注释掉的部分是有效的,但我更喜欢一行,所以我尝试使用不太详细的表单。为什么它不起作用

我得到/Users/brandon/.zshrc:62:解析错误:预期条件:读取。

[[专门用于计算表达式,而不是返回代码。if变量的一行等效值为isa:

如果您的If变体类似于:

if [[ something-or-other ]] ; then
    blah
fi
然后在单行程序中使用[[1]:

[[ something-or-other ]] && blah

此处有一个注释,说明使用大括号对命令进行分组。命令read-q&&echo;zplug install将无条件运行zplug-只有echo将受读取返回值的约束。

注意,添加诸如read-q之类的命令(依赖于.zshrc中存在的终端)是一个不好的主意。将其设置为[-t 0]]正如错误消息告诉您的,括号内的内容在语法上不是有效的条件。理论上,您可以执行类似[[$read….==something]],它确实会执行读取命令,但这是毫无意义的。从你的问题中我不明白你的代码应该实现什么。@user1934428它在一段更大的代码中,检查zshrc中是否列出了新的zplug插件,并询问你是否要安装它们。最后我将其更改为始终安装它们,但这里处理的相同更改对于外部“if”语句很有用。然后请求输入,并在测试输入内容之后。当然,您可以在单个命令中执行此操作,例如[[$read x;echo$x==Y]]来询问用户是否输入了Y,但我认为这不会使您的程序更可读。
if [[ something-or-other ]] ; then
    blah
fi
[[ something-or-other ]] && blah