双尖括号模式

Double angle bracket mode

我使用的是 PowerShell 7.1.3,在我的提示中输入单引号时发现了一个奇怪的行为:

PS: '
>>
>>

提示的样式为 >>,无论我键入什么,都不会执行任何内容(或者看起来就是这样)。我在想:

Is this activated by entering ' on the shell, or is this a side effect?

这是输入不匹配的 ' 作为命令的 故意 副作用,是的。

从技术上讲,它不是 PowerShell 本身,而是 PSReadLine 模块(它随 PowerShell 7 一起提供,默认情况下启用)。

PSReadLine 提供了许多命令行编辑改进 - 包括语法突出显示、可自定义的制表符和菜单完成以及 多行编辑 - 它通过不断地输入你的(部分)输入 PowerShell's parser,然后使用解析器返回的结果提供正确的语法高亮等

因此,当您在键入单个 ' 后按 [Enter] 时,PSReadLine 会像这样将您的输入发送到解析器:

# Parse the input script the same way PSReadLine would
$ParserErrors = @()
$AST = [System.Management.Automation.Language.Parser]::ParseInput("'", [ref]$null, [ref]$ParserErrors)

# Let's inspect any parser errors 
$ParserErrors

如果您 运行 在 PowerShell 7.1.3 中执行此操作,您将看到报告了以下错误:

Extent ErrorId                         Message                                  IncompleteInput
------ -------                         -------                                  ---------------
'      TerminatorExpectedAtEndOfString The string is missing the terminator: '.            True

注意错误的最后 属性,IsInputIncomplete - PSReadLine 发现您在提示中输入的内容 不完整 - 因此它假设您还没有写完命令并在下一行为您继续提示。

[...] no matter what I type, nothing gets executed

这不完全正确 - 如果您输入的内容 完成 输入(例如,使其再次成为有效的 PowerShell),它会让您提交它 - 在您的情况下将通过输入结尾 ':

Is this mode called somehow?

不知道,我倾向于将 >> 视为“提示持续指标”,但它本身并不是真正独特的 模式

Is this mode useful for a specific case?

好吧,如上所示,它可以防止您尝试执行语法无效或不完整的代码,我认为这本身就非常有用。

在提示符下进行多行编辑的整体能力,在我个人看来,PowerShell[=63=的最大优势之一] - 您可以开始制作小函数的原型并编写相当复杂的管道,而无需在编辑器之间来回切换。

作为 ,您还可以通过按 Shift+Enter 获得提示继续(至少在默认的 Windows 控制台主机中)- 无论现有输入是否不完整,这都有效与否。

如果愿意,您基本上可以在提示符下编写和编辑整个脚本。