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

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

为什么 zsh在行首打印cmdandfor every ?&&

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

echo "foo" && echo "bar" && \
echo "buz" && \
echo "jam"

... zsh 将显示以下内容

echo "foo" && echo "bar" && \
cmdand cmdand> echo "buz" && \
cmdand cmdand cmdand> echo "jam"

因此 zsh 会为该行之前遇到的cmdand每个添加一个。我刚刚注意到和 也有类似的情况。&&||cmdor

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

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

答案1

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

$ if [ "$var" ]
if> then
then> echo var: $var
then> else
else> echo var: not set
else> fi
var: not set
$ 

shell 不区分键入的行和粘贴的行。

在每个连续行上设置PS2='> '一个简单的。>

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

相关内容