编程技术文章分享与教程

网站首页 > 技术文章 正文

Windows PowerShell 语言规范3.0-2.词法结构

hmc789 2024-11-19 04:57:20 技术文章 1 ℃

2. 词法结构

2.1 语法

此规范使用两种文法显示 PowerShell 语言的语法结构。词汇文法展示了Unicode字符如何组合形成行终止符、注释、空白和标记。语句文法说明了如何将词汇语法产生的标记组合起来形成PowerShell脚本

在文法中使用的任何字符“a”到“z”都不区分大小写。这意味着在变量、别名、函数名、关键字、语句和运算符中的字母的大小写都将被忽略。尽管如此,在整个规范中,除了一些自动变量和首选项变量外,这些名称通常都是用小写字母书写的。

2.2 词法分析

2.2.1 脚本

语法

提示:语法定义中的“~opt~” 符号表示词法实体在语法中是可选的。

输入:

可选的多个输入元素 可选的签名块

输入元素:

空白

注释

标记

签名块:

签名开始 签名 签名结束

签名开始:

新行字符 # SIG # Begin signature block 新行字符

签名:

base64 encoded signature blob in multiple single-line-comments

签名结束:

新行字符 # SIG # End signature block 新行字符

说明:

PowerShell转换器的输入流是脚本中的输入,其中包含一系列Unicode字符。该流的词法处理涉及将这些字符缩减为一系列标记,这些标记随后成为句法分析的输入。

脚本是存储在脚本文件中的一组PowerShell命令。脚本本身没有名称,它的名称取自其源文件。该文件的结尾即表示脚本的结尾。

脚本可以选择性地包含数字签名。主机环境不需要处理数字签名之后的任何文本或任何看起来像签名的内容。本规范不包括数字签名的创建和使用。

2.2.2 行终止符

语法:

新行字符:

回车符 (U+000D)

换行符 (U+000A)

回车符(U+000D)后跟换行符(U+000A)

说明:

输入流中出现的新行字符将其划分为多行,这些行可用于错误报告和检测单行注释的结尾。

行终止符可以视为空白

2.2.3 注释

语法

注释:

单行注释

requires 注释

多行注释

单行注释:

# 注释文本[可选]

requires 注释:

#requires 空白分隔的多个参数

多行注释:

<# 多行注释文本[可选] #>

说明

源代码可以使用注释进行注解。

单行注释以“#”字符开头,以新行字符结尾。

多行注释以字符对"<#"开头,以字符对"#>"结尾。它可以作为源代码行的一部分出现,也可以作为整个源代码行出现,或者它可以跨越任意数量的源代码行。

注释通常被视为空格。

上述表明:

? 注释不嵌套。

? 字符序列<# 和 #>在单行注释中没有特殊含义。

? 字符 # 在多行注释中没有特殊含义。

词法文法意味着注释不能出现在标记内。

(有关在脚本中创建用于生成文档的特殊注释的内容,请参见附录A)

requires注释指定允许包含它的脚本运行所必须满足的条件。主要是指运行脚本的PowerShell版本。最低版本要求规定如下:

#requires -Version N[.n]

其中 N是(必需的)主要版本,n是(可选的)次要版本。

requires注释可以出现在任何脚本文件中;但是,它不能存在于函数或cmdlet中。它必须在源文件的第一行的开头。一个脚本可以包含多个requires注释。

只有当字符序列以"#"或"<#"开头时,才会将其识别为注释。例如,“hello#there”被视为单个标记,而“hello #there”被视为标记hello,后跟一个单行注释。除了空格之外,注释开始序列前面还可以有任何表达式终止字符或语句终止字符。

管理单元中不能存在requires注释。

requires注释的其他四种形式:

#requires --Assembly AssemblyId

#requires --Module ModuleName

#requires --PsSnapIn PsSnapIn [ -Version *N* [.n] ]

#requires --ShellId ShellId

2.2.4 空白

语法

空白:

Unicode类为Zs、Zl或Zp的任何字符(空白分隔符Zs,行分隔符Zl,段分隔符Zp)

水平制表符(U+0009)

垂直制表符(U+000B)

换页字符(U+000C)

`(反引号字符U+0060)后跟新行字符

说明:

空白由一个或多个空白字符的任意序列组成。除非作为标记的分隔符,否则空白一般都被忽略。

与一些流行的语言不同,PowerShell不认为行终止符是空白。不过,如果在行终止符前有一个反引号`(U+0060),则行终止符可以被视为空白。当一行的内容在语句构成上是完整的,但下一行包含与前一行关联的标记时,这是必要的。例如,

$number = 10 # assigns 10 to $number; nothing is written to the pipeline

+ 20 # writes 20 to the pipeline

- 50 # writes -50 to the pipeline

$number # writes $number's value, 10, to the pipeline

在下例中,反引号指示本行的延续。以下表达式相当于 $number=10+20-50。

$number = 10 `

+ 20 `

- 50

$number # writes $number's value to the pipeline

-20

2.3 标记

语法:

token:

keyword

variable

command

command-parameter

command-argument-token

integer-literal

real-literal

string-literal

type-literal

operator-or-punctuator

说明

标记是 PowerShell 语言中最小的词法元素。

标记可以用换行、注释、空格或其任意组合分隔。

2.3.1 关键词

语法:

keyword:

begin break catch class

continue data define do

dynamicparam else elseif end

exit filter finally for

foreach from function if

in inlinescript parallel param

process return switch throw

trap try until using

var while workflow

说明

关键字是在上下文相关位置使用时具有特殊含义的字符序列。通常,这是作为语句中的第一个标记;但是,正如语法所示,还有其他位置。(看起来像关键字但未在关键字上下文中使用的标记是命令名或命令参数。)

关键字class、define、from、using和var保留供将来使用。

注意:

编者按:PowerShell 5.0 中引入了关键字class和关键字using。请参阅about_Classes和about_Using。

2.3.2 变量

语法:

变量:

$

$?

$^

$ 作用域声明[可选] 变量名

@ 作用域声明[可选] 变量名

braced-variable

braced-variable:

${ 作用域声明[可选] 变量名 }

变量作用域:

global:

local:

private:

script:

using:

workflow:

变量命名空间

variable-namespace:

variable-characters :

variable-character:

Lu、Ll、Lt、Lm、Lo或Nd类的Unicode字符(这里指大写字母Lu,小写字母Ll,字首字母Lt,修饰字母Lm,非以上四类字母Lo,和十进制数字Nd)

_ (下划线字符U+005F)

?

转义符:

` 后跟任何Unicode字符的反引号字符(U+0060)

说明

变量在(§5)中有详细讨论。变量 $?在(§2.3.2.2)中讨论。作用域在(§3.5) 中讨论。

变量$和$^保留用于交互式环境,不在本规范的范围内。

变量名有两种编写方法:

1. 大括号变量名—— ${任意字符组合}

2. 普通变量名—— $限定字符集中的字符组合

每个普通变量名都可以使用相应的大括号变量名来表示。

例如,

$totalCost

$Maximum_Count_26

$vég?sszeg # Hungarian

$итог # Russian

$総計 # Japanese (Kanji)

${Maximum_Count_26}

${Name with`twhite space and `{punctuation`}}

${E:\\File.txt}

变量名的长度没有限制,变量名中的所有字符都是有效的,字母大小写没有区别。

有几种不同类型的变量:用户定义(§2.3.2.1)、自动(§2.3.2.2)和首选项(§2.3.2.3)。它们可以在同一作用域内共存(§3.5)。

请考虑以下函数定义和调用:

functionGet-Power([long]$base, [int]$exponent) { ... }

Get-Power 5 3 # $base is 5, $exponent is 3

Get-Power -exponent 3 -base 5 # " " "

每个参数按位置或名称传递,每次传递一个。但是,一组参数可以作为一个组传递,并展开为由运行时环境处理的单个参数。这种自动参数展开称为splatting。例如

$values = 5,3 # put arguments into an array

Get-Power @values

$hash = @{ exponent = 3; base = 5 } # put arguments into a Hashtable

Get-Power @hash

function Get-Power2 { Get-Power @args } # arguments are in an array

Get-Power2 --exponent 3 --base 5 # named arguments splatted named in @args

Get-Power2 5 3 # position arguments splatted positionally in @args

这是通过使用@而不是$作为所传递变量的第一个字符来实现的。此符号只能在命令的参数中使用。

名称被划分为各种命名空间,每个命名空间都存储在虚拟驱动器上(§3.1)。例如,变量存储在Variable: 上,环境变量存储在Env: 上,函数存储在Function: 上,别名存储在Alias: 上。所有这些名称都可以作为变量访问。

虚拟驱动器的意思是,你可以简单的CD进去,比如,cd alias:,再ls一下,然后通过cd c: 命令来重新回到C盘。当然,你也可以象下例这样直接访问其中的内容。

function F { "Hello from F" }

$Function:F # invokes function F

Set-Alias A F

$Alias:A # invokes function F via A

$Count = 10

$Variable:Count # accesses variable Count

$Env:Path # accesses environment variable Path

任何带有显示的Variable:的变量名,其命名空间都等同于没有Variable:限定的相同变量名。例如,$v和$Variable:v是可互换的。

除了在语言中定义外,变量也可以由 cmdlet New-Variable定义。

2.3.2.1 用户定义的变量

语法允许但自动变量或首选项变量未使用的任何变量名称都可用于用户定义的变量。

用户定义的变量由用户定义的脚本创建和管理。

2.3.2.2 自动变量

自动变量存储有关PowerShell环境的状态信息。它们的值可以在用户编写的脚本中读取,但不能写入。

注意:

为了减少重复,文档中原有的表格已被移除。有关自动变量的完整列表,请参阅about_Automatic_Variables。

2.3.2.3 首选项变量

首选项变量存储会话的用户首选项。它们由 PowerShell 运行时环境创建和初始化。它们的值可以在用户编写的脚本中读取和写入。

注意:

为了减少重复,文档中原有的表格已被移除。有关首选项变量的完整列表,请参阅about_Preference_Variables。

2.3.3 命令

语法:

命令:

可展开字符串文本

原文文本

变量

标记字符

标记字符:

任何 Unicode 字符, 除下列字符之外

{ } ( ) ; , | & $

` (反引号 U+0060)

双引号

单引号

空白

新行字符

转义字符

2.3.4 参数

语法

命令参数:

短横线 参数首字符 参数字符 可选的冒号

参数首字符:

Lu、Ll、Lt、Lm或Lo类的Unicode字符(大小写字母,及其它字母)

_ (下划线 U+005F)

?

参数字符:

任何 unicode 字符, 除了下列字符之外,

{ } ( ) ; , \| & . [

冒号字符 U+003A

空白

新行字符

原文命令参数:

双引号命令字符串

& 除&字符之外的字符

任何 Unicode 字符, 除了下列字符,

|

新行字符

说明:

调用命令时,可以通过一个或多个参数向其传递信息,这些参数的值可以通过一组相应的参数从命令中访问。将参数与参数匹配的过程称为参数绑定。

有三种参数:

?开关参数(§8.10.5)-- 它具有命令参数的形式,其中参数首字符和参数字符共同构成开关名称,它对应于被调用命令中的参数名称(不带前导-)。如果省略了尾随冒号,则此参数的存在表示相应的参数被设置为$true。如果存在尾随冒号,紧跟其后的参数必须指定bool类型的值,并且相应的参数设置为该值。例如,以下调用是等效的:

Set-MyProcess -Strict

Set-MyProcess -Strict: $true

?带参数的参数(§8.10.2)-- 它具有命令参数的形式,其参数字首符和参数字符共同构成参数名称,它对应于被调用命令中的参数名称(不带前导-)。后面不能有冒号。紧跟其后的参数指定关联的值。例如,给定具有参数$base和$exponent的命令Get Power,以下调用是等效的:

Get-Power -base 5 -exponent 3

Get-Power -exponent 3 -base 5

位置参数(§8.10.2)- 命令中的第一个参数的位置为零。位置0的参数绑定到位置0;位置1的参数绑定到位置1;等等。例如,给定一个命令Get Power,其参数$base和$exponent分别位于位置0和1,以下命令将调用该命令:

Get-Power 5 3

有关特殊参数--和--%的详细信息,请参见§8.2。

调用命令时,参数名称可以缩写;可以使用全名的任何不同的前导部分,前提是对于同一命令接受的其他参数的名称是明确的。

调用命令时,参数名称可以缩写;可以使用全名的任何不同的前导部分,前提是对于其他参数的名称没有歧义。

有关参数绑定的信息,请参见§8.14。

2.3.5 文本

语法:

文本:

整数文本

实数文本

字符串文本

2.3.5.1 数字文本

有两种类型的数字文本:整数 (§2.3.5.1.1) 和实数 (§2.3.5.1.2)。两者都可以有乘数后缀(§2.3.5.1.3)。

2.3.5.1.1 整数文本

语法:

整数文本:

十进制整数文本

十六进制整数文本

十进制整数文本:

多个十进制数字 可选的数字类型后缀 可选的乘数

十进制数字:

0 1 2 3 4 5 6 7 8 9

数字类型后缀:

long型后缀

decimal型后缀

十六进制整数文本:

0x 多个十六进制数字 可选的long型后缀

可选的乘数

十六进制数字:

0 1 2 3 4 5 6 7 8 9 a b c d e f

long型后缀:

l

乘数:

kb mb gb tb pb

说明:

整数文本的类型由其值、是否存在long类型后缀以及是否存在数字乘数(§2.3.5.1.3) 决定。

对于不带long类型后缀的整数文本

?如果其值可用int类型(§4.2.3)表示,则为其类型;

?否则,如果其值可以用 long 类型 (§4.2.3) 表示,则为其类型。

?否则,如果其值可以用decimal类型(§2.3.5.1.2)表示,则为其类型。

?否则,用double类型(§2.3.5.1.2)表示。

对于具有long类型后缀的整数文本

?如果其值可用long类型(§4.2.3)表示,则为其类型;

?否则,该文本的格式就不正确。

在整数值的二进制补码表示法中,负值比正值多一个。对于int类型,该额外值为?2147483648。对于long类型,该额外值为?9223372036854775808。即使标记2147483648通常被视为long类型的文本,但如果它的前面紧挨着一元“-”运算符,则该运算符和文本将被视为具有最小值的 int 类型的文本。类似地,尽管标记9223372036854775808通常被视为decimal类型的real文本,但如果它前面紧挨着一元 “-” 运算符,则该运算符和文本被视为具有最小值的long类型的文本。

整数文本的一些示例有123(int)、123L(long)和200000000(long)。

没有byte类型的整型文本。

2.3.5.1.2 实数文本

语法:

实数文本:

十进制数字 . 十进制数字 指数部分[可选] decimal类型后缀[可选] 乘数[可选]

. 十进制数字 指数部分[可选] decimal类型后缀[可选] 乘数[可选]

十进制数字 指数部分 decimal类型后缀[可选] 乘数[可选]

指数部分:

e 符号[可选] 十进制数字

符号: 下列之一

+

横线

decimal类型后缀:

d

l

乘数: 下列之一

kb mb gb tb pb

横线:

- (U+002D)

短横线字符 (U+2013)

长横线字符 (U+2014)

细长横线字符 (U+2015)

说明:

实数文本可以包含一个数字乘数(§2.3.5.1.3)。

有两种类型的实数文本:double 和 decimal。这些分别由十进制类型后缀的缺失或存在表示。(不存在浮点数文本。)

double 实数文本具有双精度类型 (§4.2.4.1)。 decimal 实数文本具有十进制类型 (§4.2.4.2)。十进制实数文本的小数部分尾随的零是有效的。

如果 double 文本中指数部分的值小于支持的最小值,则该 double 文本的值为0。如果 decimal 文本中指数部分的值小于支持的最小值,则该文本的格式不正确。如果 double 或 decimal 文本中指数部分的值大于支持的最大值,则该文本的格式不正确。

双实数文本的一些示例包括 1.、1.23、.45e35、32.e+12 和 123.456E-231。

decimal实数文本的一些示例包括 1d(其精度为 0)、1.20d(精度 2)、1.23450e1d(即 12.3450,精度 4)、1.2345e3d(即 1234.5,精度 1)、1.2345e-1d(即 0.12345,精度 5)和 1.2345e-3d(即 0.0012345,精度为 7)。

!注意

由于 double 文本不需要有小数或指数部分,因此值为123的integer对象需要用格式 (123).M 来选择其属性和方法,例如, 123.tostring() 这种格式就是错误的,正确的格式应当是 (123).tostring()。如果123外面没有括号包围,该文本将被视为实数文本的错误格式。

!注意

尽管 PowerShell 不为无穷大和 NaN 提供文本,但类似的等价物可以从 float 和 double 类型的静态只读属性 PositiveInfinity、NegativeInfinity 和 NaN 中获得。

语法允许以双精度实数文本开头的内容具有 l or L 类型后缀。这样的标记实际上是一个整数文本,其值由 long 类型表示。

!注意

保留此功能是为了向后兼容早期版本的 PowerShell。但是,不鼓励程序员使用这种形式的整数文本,因为它们很容易掩盖文本的实际值。例如,1.2L 的值为 1,1.2345e1L 的值为 12,1.2345e-5L 的值为 0,这些都不是显而易见的。

2.3.5.1.3 乘数后缀

语法:

乘数: 下列之一

kb mb gb tb pb

说明:

为方便起见,整数和实数文本可以包含一个数字乘数,它表示一组常用的10次幂之一。数字乘数可以用大写或小写字母的任意组合书写。

2.3.5.1.3 乘数后缀

Multiplier Meaning Example

kb kilobyte (1024) 1kb ≡ 1024

mb megabyte (1024 x 1024) 1.30Dmb ≡ 1363148.80

gb gigabyte (1024 x 1024 x 1024) 0x10Gb ≡ 17179869184

tb terabyte (1024 x 1024 x 1024 x 1024) 1.4e23tb ≡ 1.5393162788864E+35

pb petabyte (1024 x 1024 x 1024 x 1024 x 1024) 0x12Lpb ≡ 20266198323167232

2.3.5.2 字符串文本

语法:

字符串文本:

expandable-string-literal

expandable-here-string-literal

verbatim-string-literal

verbatim-here-string-literal

说明

有四种类型的字符串文本:

?原文字符串文本(单行单引号),是由一对单引号字符分隔的零个或多个字符组成的序列。例如'红色'。

?可展开字符串文字(单行双引号),是由一对双引号字符分隔的零个或多个字符组成的序列。例如"红色"。

?原文here-string文本(多行单引号),它是由零个或多个字符组成的序列,分别由字符对 @'和 '@ 分隔,所有字符都包含在两个或多个行中。例如:

@'

line 1

'@

@'

line 1

line 2

'@

?可展开here-string文本(多行双引号),这是由零个或多个字符组成的序列,分别由字符对 @" 和 "@ 分隔,所有字符都包含在两个或多个行中。例如:

@"

line 1

"@

@"

line 1

line 2

"@

对于原文here-string文本和可展开here-string文本,除了空格(被忽略)外,任何字符都不能与分隔字符对处在同一行上。

原文here-string文本或可展开here-string文本的正文从开始分隔符后面的第一个行开始,到结束分隔符前面的最后一个行结束。正文可以是空的。结束分隔符前面最后一行上的行终止符不是该文本正文的一部分。

这些类型中的任何一种文本都具有字符串类型

用于分隔原文字符串文本或可展开字符串文本的字符可以包含在此类字符串文本中,方法是连续写两遍该字符。例如,'What''s the time?',"I said, ""Hello""."。但是,单引号字符在可展开字符串文本中没有特殊含义,而双引号字符在原文字符串文本中没有特殊含义。

可展开字符串文本和可展开here-string文本可能包含转义字符(§2.3.7)。例如,将以下字符串文本写入管道时,结果如下所示:

Powershell

"column1`tcolumn2`nsecond line, `"Hello`", ```Q`5`!"

Output

column1<水平制表符>column2<new-line>

second line, "Hello", `Q5!

如果可展开字符串文本或可展开here-string文本包含变量名称,除非该名称前面紧跟转义字符,否则该名称将替换为该变量值的字符串表示形式(§6.7)。这被称为变量替换。

!注意

如果变量名是某个较大表达式的一部分,则只替换变量名。例如,如果$a是一个包含元素100和200的数组,">$a.Length<" 将输出 >100 200.Length<,而 ">$($a.Length)<" 将输出 >2< 。请参见下面的子表达式展开。

例如,源代码

PowerShell

$count = 10

"The value of `$count is $count"

Output

The value of $count is 10.

请考虑以下代码:

PowerShell

$a = "red","blue"

"`$a[0] is $a[0], `$a[0] is $($a[0])" # second [0] is taken literally

结果是

$a[0] is red blue[0], $a[0] is red

可展开字符串文本和可展开here-string文本还支持一种称为子表达式展开的替换,方法是将$(...)形式的文本视为子表达式(§7.1.6)。此类文本将替换为该表达式的值的字符串表示形式(§6.8)。就结果字符串的构造而言,子表达式的语句列表中用于分隔标记的任何空白都将被忽略。

下述例子,

PowerShell

$count = 10

"$count + 5 is $($count + 5)"

"$count + 5 is `$($count + 5)"

"$count + 5 is `$(`$count + 5)"

结果为,

输出

10 + 5 is 15

10 + 5 is $(10 + 5)

10 + 5 is $($count + 5)

以下代码,

PowerShell

$i = 5; $j = 10; $k = 15

"`$i, `$j, and `$k have the values $( $i; $j; $k )"

结果为,

输出

$i, $j, and $k have the values 5 10 15

这四行可以写得更简洁,如下所示:

PowerShell

"`$i, `$j, and `$k have the values $(($i = 5); ($j = 10); ($k = 15))"

在下面的示例中,

PowerShell

"First 10 squares: $(for ($i = 1; $i -le 10; ++$i) { "$i $($i*$i) " })"

结果如下,

输出

First 10 squares: 1 1 2 4 3 9 4 16 5 25 6 36 7 49 8 64 9 81 10 100

如上所示,子表达式可以包含同时具有变量替换和子表达式展开的字符串文本。还要注意,内部的可展开字符串文本的分隔符不需要转义;它们位于子表达式内部这一事实意味着它们不能成为外部可展开字符串文本的终止符。

每次使用包含变量替换或子表达式展开的可扩展字符串文本或可展开here-string文本时,都会对其求值;例如

PowerShell

$a = 10

$s1 = "`$a = $($a; ++$a)"

"`$s1 = >$s1<"

$s2 = "`$a = $($a; ++$a)"

"`$s2 = >$s2<"

$s2 = $s1

"`$s2 = >$s2<"

结果为,

输出

$s1 = >$a = 10<

$s2 = >$a = 11<

$s2 = >$a = 10<

原文here-string文本的内容是逐字提取的,包括正文中的任何前导或尾随的空格。因此,嵌入的单引号字符不需要加倍,并且没有替换或扩展。例如

PowerShell

$lit = @'

That's it!

2 * 3 = $(2*3)

'@

结果是,

输出

That's it!

2 * 3 = $(2*3)

可展开的here-string文本的内容可以进行替换和扩展,但正文内除子表达式内的任何前导或尾随空格都是逐字提取的,并且嵌入的双引号字符不需要加倍。例如

PowerShell

$lit = @"

That's it!

2 * 3 = $(2*3)

"@

这在展开时会产生以下文本:

PowerShell

That's it!

2 * 3 = 6

!注意

出于代码可读性的考虑,可以在多个代码行之间断开长字符串文本,而无需插入行终止符。这是通过将每个部分编写为单独的文本并使用 + 运算符 (§7.7.2) 连接这些部分来完成的。此运算符允许其操作数指定四种字符串文本中的任何一种。

!注意

尽管本身没有字符文本这样的东西,但通过访问1个字符字符串中的第一个字符可以达到相同的效果,如下所示:[char]"A"或 "A"[0]。

对于verbatim-here-string-literals 和expandable-here-string-literals,正文中的每个行终止符都完全按照它所提供的方式表示。

2.3.5.3 Null文本

参见自动变量$null(§2.3.2.2)。

2.3.5.4 布尔文本

参见自动变量$false和$true(§2.3.2.2)。

2.3.5.5 数组文本

PowerShell 允许使用一元逗号运算符(§7.2.1)、数组表达式 (§7.1.7)、二进制逗号运算符(§7.3)和区间运算符(§7.4)来编写数组类型(§9)的表达式。

2.3.5.6 哈希文本

PowerShell 允许使用hash-literal-expression (§7.1.9)编写 Hashtable (§10) 类型的表达式。

2.3.5.7 类型名称

语法:

type-name:

type-identifier

type-name . type-identifier

type-identifier:

type-characters

type-characters:

type-character

type-characters type-character

type-character:

A Unicode character of classes Lu, Ll, Lt, Lm, Lo, or Nd

_ (The underscore character U+005F)

array-type-name:

type-name [

generic-type-name:

type-name [

2.3.6 运算符和标点符号

语法:

operator-or-punctuator: one of

{ } [ ] ( ) @( @{ $( ;

&& || & | , ++ .. :: .

! * / % + - --

-and -band -bnot -bor

-bxor -not -or -xor

assignment-operator

merging-redirection-operator

file-redirection-operator

comparison-operator

format-operator

assignment-operator: one of

= -= += *= /= %=

file-redirection-operator: one of

> >> 2> 2>> 3> 3>> 4> 4>>

5> 5>> 6> 6>> *> *>> <

merging-redirection-operator: one of

*>&1 2>&1 3>&1 4>&1 5>&1 6>&1

*>&2 1>&2 3>&2 4>&2 5>&2 6>&2

comparison-operator: *one of

-as -ccontains -ceq

-cge -cgt -cle

-clike -clt -cmatch

-cne -cnotcontains -cnotlike

-cnotmatch -contains -creplace

-csplit -eq -ge

-gt -icontains -ieq

-ige -igt -ile

-ilike -ilt -imatch

-in -ine -inotcontains

-inotlike -inotmatch -ireplace

-is -isnot -isplit

-join -le -like

-lt -match -ne

-notcontains -notin -notlike

-notmatch -replace -shl*

-shr -split

format-operator:

-f

说明:

&&和||保留供将来使用。

!注意

编者按:管道链操作符&&和||是在PowerShell 7中引入的。请参阅about_Pipeline_Chain_Operators。

以短划线开头的运算符在该短划线和它后面的标记之间不得有任何空格。

2.3.7 转义字符

语法:

escaped-character:

` (The backtick character U+0060) followed by any Unicode character

说明:

转义字符是一种通过为字符指定前缀反引号字符 (U+0060) 来为其指定特殊解释的方法。下表显示了每个转义字符的含义:

2.3.7 转义字符

转义字符意义

`a 警报 (U+0007)

`b 退格 (U+0008)

`f 换页 (U+000C)

`n 新行 (U+000A)

`r 回车 (U+000D)

`t 水平制表 (U+0009)

`v 垂直制表 (U+0009)

`' 单引号 (U+0027)

`" 双引号 (U+0022)

`` 反引号 (U+0060)

`0 NUL (U+0000)

`x 如果x是上面显示的字符以外的字符,则忽略反引号字符,并取其原文。

上表中最后一个条目的含义是,可以将原本分隔标记的空格改为令牌的一部分。例如,包含空格的文件名可以写成Test` Data.txt(以及'Test Data.txt'或"Test Data.txt")。

Tags:

标签列表
最新留言