about_Special_Characters

简短说明

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

长说明

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

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

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

PowerShell 可识别以下转义序列:

序列 说明
`0 Null
`a 警报
`b Backspace
`e Escape
`f 换页
`n 换行
`r 回车
`t 水平制表符
`u{x} Unicode 转义序列
`v 垂直制表符

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

特殊分析令牌:

序列 说明
-- 将其余值视为参数而不是参数
--% 停止分析以下任何内容

null ('0)

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

警报 (“) ”

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

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

backspace ('b)

退格 (`b) 字符将光标移回一个字符,但它不会删除任何字符。

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

"backup`b`b out"
back out

转义 ()

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

有关 ANSI 转义序列的详细信息,请参阅 ANSI_escape_code

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

$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})

Unicode 转义序列 (`u{x}) 允许按其码位的十六进制表示形式指定任何 Unicode 字符。 这包括基本多语言平面上方的 Unicode 字符 (>0xFFFF) 其中包括表情符号字符,如 竖起大拇指 (`u{1F44D}) 字符。 Unicode 转义序列至少需要一个十六进制数字,并且最多支持六个十六进制数字。 序列 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.

参数结束标记 (--)

参数结束标记 (--) 指示其后面的所有参数都将以实际形式传递,就像在它们周围放置双引号一样。 例如,使用 -- 可以输出字符串 -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

以下是另一个示例。 showArgs 函数输出传递给它的值。 在此示例中,我们将名为 的 $HOME 变量传递给函数两次。

function showArgs {
  "`$args = " + ($args -join '|')
}

showArgs $HOME --% $HOME

可以在输出中看到,对于第一个参数,变量 $HOME 由 PowerShell 解释,以便将变量的值传递给函数。 第二次 $HOME 使用 是在停止分析标记之后的,因此字符串“$HOME”将传递给函数,而无需解释。

$args = C:\Users\username|--%|$HOME

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

另请参阅