关于特殊字符
简短说明
描述控制 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
backspace 将光标移回一个字符,但它不会删除任何字符。
该示例写入“ 备份 ”一词,然后将光标移回两次。 然后,在新位置,写一个空格,后跟 单词 out。
"backup`b`b out"
back out
转义 ('e)
转义 (`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
) 字符前进到下一个垂直制表位,并在该点写入剩余输出。 这在默认 Windows 控制台中不起作用。
Write-Host "There is a vertical tab`vbetween the words."
以下示例演示将在打印机或其他主机中获取的输出。
There is a vertical tab
between the words.
停止分析令牌 (-%)
停止分析 (--%
) 令牌阻止 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。