zsh 中的 cmdand/cmdor 是什么意思?

nor*_*ius 3 zsh

为什么zsh的打印cmdand每一个&&在该行的开始?

例如,当我将以下几行粘贴到 Z shell 中时

echo "foo" && echo "bar" && \
echo "buz" && \
echo "jam"
Run Code Online (Sandbox Code Playgroud)

... zsh 会向我显示以下内容

echo "foo" && echo "bar" && \
cmdand cmdand> echo "buz" && \
cmdand cmdand cmdand> echo "jam"
Run Code Online (Sandbox Code Playgroud)

所以 zshcmdand&&它在该行之前遇到的每一个添加一个。我只是注意到类似的适用于||cmdor

为什么这会有用?它不会让控制台变得混乱吗?这种行为可以控制吗?

我在 Mac OS 和 Ubuntu 上观察到 zsh 版本 >5.x 的这种行为。

AFH*_*AFH 5

它由环境变量的值控制PS2,其默认值'%_> '给出了这种行为。它的目的是显示您在多行命令中的位置(而不仅仅是以反斜杠结尾的行),例如,如果您在多行中键入条件命令,您将获得:-

$ if [ "$var" ]
if> then
then> echo var: $var
then> else
else> echo var: not set
else> fi
var: not set
$ 
Run Code Online (Sandbox Code Playgroud)

外壳不区分键入和粘贴的行。

在每个延续线上设置PS2='> '一个简单的>

有关更多信息,请参阅手册man zshall并搜索PS2