今天我碰巧按下'
了ls
所以命令是ls'
> ls'
quote> ls'
zsh: command not found: ls\nls
>
有人能告诉我,这是怎么ls quote
回事吗?
答案1
由于您打开了报价'
并按下了 Enter,因此 shell 希望您关闭报价。该quote>
提示只是此类的视觉指示。
这样您就可以将多行参数传递给程序。
例如:
$ echo 'hi
quote> there'
hi
there
由于您输入了ls'Enterls'Enter,这相当于尝试运行一个名为ls\nls
(中间带有换行符的命令)的命令,该命令不存在,因此 shell 给您一个错误。
答案2
这quote>
就是$PS2
(又名$PROMPT2
)zsh
提示,辅助提示字符串。
在您的情况下,主提示字符串($PS1
/ $PROMPT
)>
似乎是邀请您输入命令的字符串。第二个命令是邀请您继续并完成命令的命令。
它会在您按下Enter命令但尚未完成时显示。
在 中,的zsh
默认值为,其中是(记录在$PS2
%_>
%_
提示扩展/外壳状态):
%_
解析器的状态,即已在命令行上启动的shell 结构(如
if
和)。for
如果给定一个整数,将打印许多字符串;零或负数或无整数意味着打印尽可能多的值。这在提示PS2
连续行和使用选项PS4
进行调试时最有用XTRACE
;在后一种情况下,它也将以非交互方式工作。
例如,如果我输入:
my-PS1-prompt> (while true; do for i in "${var-qwe
subsh while for dquote braceparam>
shell 告诉我,在该命令完成并且 shell 可以开始运行它之前,我仍然需要关闭大${...}
括号参数扩展、"..."
双引号、完成for
and语句并关闭子 shell。while
就您而言,它告诉您需要关闭该'...'
单引号字符串。一旦您这样做,它会尝试运行相应的命令,但会失败,因为ls<newline>ls
您的系统上没有命令。
请注意,Enter您可以不用按Escape, Enter(在某些终端上您也可以输入Alt+ Enter),或Ctrl+ V, Ctrl+来在编辑缓冲区中输入J文字换行符(又名),而不是当前行。^J
提交给shell。在这种情况下,您将看不到辅助提示,并且可以将光标移回第一行。
除了$PS1
和之外$PS2
,还有$PS3
(又名$PROMPT3
)用于select
语句, $PS4
(又名$PROMPT4
)用于xtrace
调试输出,$RPS1
( $RPROMP
) 和$RPS2
( $RPOMPT2
) 类似于$PS1
/ $PS2
,只不过它们打印在屏幕的右侧。
$PS1,2,3,4
来自 Korn shell,而%x
特殊序列来自csh
(由zsh
)。 POSIX 指定了除PS3
(因为它没有指定ksh
'sselect
语句),但没有指定%x
序列。
tcsh
曾经$prompt
并$rprompt
启发zsh
了$RPS1
/ $PRS2
。
shell在其提示bash
中为其特殊序列选择了不同的(并且不幸的)语法,使用与/中的字母相反的和不同且不兼容的字母。是特定的。$PSx
\
%
tcsh
zsh
%_
zsh