什么是“ls 引用”?

什么是“ls 引用”?

今天我碰巧按下'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(又名$PROMPT2zsh提示,辅助提示字符串。

在您的情况下,主提示字符串($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 可以开始运行它之前,我仍然需要关闭大${...}括号参数扩展、"..."双引号、完成forand语句并关闭子 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\%tcshzsh%_zsh

相关内容