about_Special_Characters

简短说明

介绍控制 PowerShell 如何解释序列中下一个字符的特殊字符序列。

长说明

PowerShell 支持一组特殊字符序列,这些序列用于表示不属于标准字符集的字符。 这些序列通常称为转义序列

转义序列以反引号字符开头,称为重音符号 (ASCII 96),并且区分大小写。 反引号字符也可称为转义字符

仅当转义序列包含在双引号 (") 字符串中时才会被解释。

PowerShell 可识别这些转义序列:

Sequence 说明
`0 Null
`a 警报
`b Backspace
`e 转义(在 PowerShell 6 中添加)
`f 换页
`n 换行
`r 回车
`t 水平制表符
`u{x} Unicode 转义序列(在 PowerShell 6 中添加)
`v 垂直制表符

PowerShell 还有一个特殊的标记,用于标记要停止分析的位置。 此标记后面的所有字符都用作不被解释的文本值。

特殊分析标记:

Sequence 说明
-- 将其余值视为自变量而不是参数
--% 停止分析后面的任何内容

Null (`0)

null (`0) 字符在 PowerShell 输出中显示为空白。 此功能允许你使用 PowerShell 读取和处理使用空字符的文本文件,例如字符串终止符或记录终止指示符。 null 特殊字符不等于 $null 变量,后者存储 null 值。

警报 (`a)

警报 (`a) 字符会向计算机的扬声器发送蜂鸣信号。 可以使用此字符来警告用户即将发生的操作。 以下示例将向本地计算机的扬声器发送两声蜂鸣信号。

for ($i = 0; $i -le 1; $i++){"`a"}

退格键 (`b)

退格键 (`b) 字符会将光标向后移动一个字符,但不会删除任何字符。

该示例写入单词 backup,然后将光标向后移动两次。 然后,在新位置写一个空格,后跟 out 一词。

"backup`b`b out"
back out

转义符 (`e)

注意

此特殊字符在 PowerShell 6.0 中添加。

转义 (`e) 字符最常用于指定虚拟终端序列(ANSI 转义序列),该序列修改文本的颜色和其他文本属性(例如粗体和下划线)。 这些序列还可用于游标定位和滚动。 PowerShell 主机必须支持虚拟终端序列。 可以检查 $Host.UI.SupportsVirtualTerminal 的布尔值,以确定是否支持这些 ANSI 序列。

有关 ANSI 转义序列的详细信息,请参阅维基百科中的 ANSI 转义代码一文。

以下示例输出具有绿色前景色的文本。

$fgColor = 32 # green
"`e[${fgColor}mGreen text`e[0m"
Green text

换页符 (`f)

换页符(`f)是一条打印指令,用于弹出当前页并继续打印下一页。 换页符仅影响打印文档。 它不会影响屏幕输出。

新建行 (`n)

新建行 (`n) 字符会在该字符后立即插入换行符。

此示例演示如何使用新建行字符在 Write-Host 命令中创建换行符。

"There are two line breaks to create a blank line`n`nbetween the words."
There are two line breaks to create a blank line

between the words.

回车符 (`r)

回车符 (`r) 会将输出光标移动到当前行的开头并继续写入。 当前行上的所有字符都将被覆盖。

在此示例中,回车符之前的文本将被覆盖。

Write-Host "These characters are overwritten.`rI want this text instead "

请注意,`r 字符之前的文本并未被删除,而是被覆盖。

I want this text instead written.

水平制表符 (`t)

水平制表符 (`t) 字符会前进到下一个制表位并在该点继续写入。 默认情况下,PowerShell 控制台每八个空格就有一个制表位。

此示例在每列之间插入两个制表符。

"Column1`t`tColumn2`t`tColumn3"
Column1         Column2         Column3

Unicode 字符 (`u{x})

注意

此特殊字符在 PowerShell 6.0 中添加。

Unicode 转义序列 (`u{x}) 允许通过其代码点的十六进制表示来指定任何 Unicode 字符。 这包括基本多语言平面 (>0xFFFF) 之上的 Unicode 字符,其中包括表情符号字符,例如竖起大拇指 (`u{1F44D}) 字符。 Unicode 转义序列需要至少 1 个十六进制数字,最多支持 6 个十六进制数字。 序列的最大十六进制值是 10FFFF

此示例输出向上向下箭头 (↕) 符号。

"`u{2195}"

垂直制表符 (`v)

垂直制表符 (`v) 字符会前进到下一个垂直制表位,并在该点写入剩余的输出。 垂直选项卡的呈现依赖于设备和终端。

Write-Host "There is a vertical tab`vbetween the words."

以下示例显示一些常见环境中垂直选项卡的渲染输出。

Windows 控制台主机应用程序将 (`v) 解释为不添加额外空格的特殊字符。

There is a vertical tab♂between the words.

Windows 终端将垂直制表符呈现为回车符和换行符。 输出的其余部分打印在下一行的开头。

There is a vertical tab
between the words.

在打印机或基于 UNIX 的控制台中,垂直制表符会前进到下一行并在该点写入剩余的输出。

There is a vertical tab
                       between the words.

续行符

反引号字符也可以用在行尾,作为向 PowerShell 解析器发出的信号,表明该命令在下一行继续。 有关详细信息,请参阅 about_Parsing

参数结束标记 (--)

参数结束标记 (--) 指示其后面的所有自变量都按其实际格式传递,就如同在它们周围添加了双引号一样。 例如,使用 -- 可以输出字符串 -InputObject,而无需使用引号或将其解释为参数:

Write-Output -- -InputObject
-InputObject

这是 POSIX Shell 和实用程序规范中指定的约定。

停止分析标记 (--%)

停止分析 (--%) 标记可防止 PowerShell 将字符串解释为 PowerShell 命令和表达式。 这样,这些字符串就可以传递到其他程序进行解释。

将停止分析标记放在程序名称之后和可能导致错误的程序参数之前。

在此示例中,Icacls 命令使用停止分析标记。

icacls X:\VMS --% /grant Dom\HVAdmin:(CI)(OI)F

PowerShell 将以下字符串发送到 Icacls

X:\VMS /grant Dom\HVAdmin:(CI)(OI)F

在此第二个示例中,我们将变量$HOMEcmd.exe /c echo传递给命令两次。

cmd.exe /c echo $HOME --% $HOME

输出显示 PowerShell 解释第一个实例 $HOME ,以便将变量的值传递给 cmd。 第二个 $HOME 实例位于停止分析令牌之后,因此它作为文本字符串传递。

C:\Users\username  $HOME

有关停止分析标记的详细信息,请参阅 about_Parsing

另请参阅