简短说明
介绍控制 PowerShell 如何解释序列中的下一个字符的特殊字符序列。
详细说明
PowerShell 支持一组特殊字符序列,这些序列用于表示不属于标准字符集的字符。 这些序列通常称为 转义序列。
转义序列以反杆字符开头,称为重音符(ASCII 96),区分大小写。 反杆字符也可以称为 转义字符。
转义序列仅在双引号 (") 字符串中包含时才解释。
PowerShell 可识别这些转义序列:
| 序列 | 描述 |
|---|---|
`0 |
零 |
`a |
警报 |
`b |
Backspace |
`e |
Escape (在 PowerShell 6 中添加) |
`f |
表单源 |
`n |
新行 |
`r |
回车符 |
`t |
水平选项卡 |
`u{x} |
Unicode 转义序列(在 PowerShell 6 中添加) |
`v |
垂直选项卡 |
PowerShell 还有一个特殊的令牌,用于标记要停止分析的位置。 此标记后面的所有字符都用作未解释的文本值。
特殊分析令牌:
| 序列 | 描述 |
|---|---|
-- |
将剩余值视为参数而不是参数 |
--% |
停止分析以下任何内容 |
~ |
波浪号 |
Null ('0)
Null (`0) 字符在 PowerShell 输出中显示为空白。
此功能允许你使用 PowerShell 读取和处理使用 null 字符的文本文件,例如字符串终止或记录终止指示器。 null 特殊字符不等效于 $null 变量,该变量存储 null 值。
警报 ('a)
警报(`a)字符向计算机的扬声器发送蜂鸣信号。
可以使用此字符警告用户即将发生的作。 以下示例向本地计算机的扬声器发送两个蜂鸣信号。
for ($i = 0; $i -le 1; $i++){"`a"}
Backspace ('b)
后空(`b)字符将光标移回一个字符,但不会删除任何字符。
该示例编写单词 备份,然后将光标移回两次。 然后,在新位置,写一个空格后跟单词 。
"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)字符前进到下一个制表位,并在该点继续写入。 默认情况下,PowerShell 控制台在每个第八个空间有一个制表位。
本示例在每个列之间插入两个选项卡。
"Column1`t`tColumn2`t`tColumn3"
Column1 Column2 Column3
Unicode 字符 ('u{x})
注意
此特殊字符已在 PowerShell 6.0 中添加。
Unicode 转义序列(`u{x})允许通过代码点的十六进制表示形式指定任何 Unicode 字符。 这包括基本多语言平面(>0xFFFF)上方的 Unicode 字符,其中包括表情符号字符,例如 竖起(`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.
行延续
还可以在行末尾使用反杆字符作为 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
在此第二个示例中,我们将变量 $HOME 传递给 cmd.exe /c echo 命令两次。
cmd.exe /c echo $HOME --% $HOME
输出显示 PowerShell 解释 $HOME 的第一个实例,以便变量的值传递给 cmd。
$HOME 的第二个实例位于停止分析令牌之后,因此它作为文本字符串传递。
C:\Users\username $HOME
有关停止分析令牌的详细信息,请参阅 about_Parsing。
蒂尔德 (~)
波形符(~)在 PowerShell 中具有特殊意义。 当它在路径开头与 PowerShell 命令一起使用时,PowerShell 会将平铺字符扩展到用户的主目录。 如果在路径中的其他任何位置使用平铺字符,则会将其视为文本字符。
有关停止分析令牌的详细信息,请参阅 about_Parsing。