如下说明是翻译: help about_parsing 产生的帮助信息.
译者: Edengundam(马涛)
Parsing
简短描述
介绍Windows PowerShell如何去分析命令行
详细描述
当你在命令提示符下输入命令后, PowerShell将会把输入的文本分割成被称为符号(Token)的连续片段, 然后决定如何解释每个独立的片段. 例如, PowerShell将如下命令分解为两个符号:
Write-Host book
第一个符号就是"Write-Host," "book"是第二个符号. PowerShell在整个命令的上下文中,对每个符号独立的进行解释.
当处理命令是, PowerShell分析器工作在两个模式中:
· 表达式模式(Expression mode) – 字符串值必须使用引号括起来. 没有被引号括起来的数字将被当作数值类型(否则被解释为字符串).
· 参数模式(Argument mode) – 除非以: 美元符号($), at符号(@), 单引号(?), 双引号("), 或者一个开圆括号(()的特殊字符开头, 否则都被当作可扩展的字符串. 如果是这些特殊字符开头, 那么当作值表达式进行求值.
下表显示了在表达式和参数模式时, 命令处理的几个例子, 以及这些命令产生的输出结果:
例子
|
模式
|
结果
|
2+2
|
表达式
|
整数值"4"
|
Write-Output 2+2
|
参数
|
字符串"2+2"
|
Write-Output (2+2)
|
表达式
|
整数值"4"
|
$a = 2+2
|
表达式
|
整数值"4" (赋值给$a)
|
Write-Output $a
|
表达式
|
整数值"4"
|
Write-Output $a/H
|
参数
|
字符串"4/H"
|
每个符号都被当作某种类型的对象, 例如: 布尔类型或字符串类型. PowerShell试图根据表达式来决定对象的类型. 对象类型取决于命令的形参所期待的类型和PowerShell是否能够将实参转换为形参所期待的类型. 下表显示了几个关于根据表达式返回值进行类型赋值的例子:
例子
|
模式
|
结果
|
Write-Output !1
|
参数
|
字符串"!1"
|
Write-Output (!1)
|
表达式
|
布尔值"false"
|
Write-Output (2)
|
表达式
|
整数值"2"
|
当处理cmdlet参数时, PowerShell能够识别通过引号保护的字符串和没有使用引号的字符串区别. 例如, 如下命令中, -type被当作是形参的名称:
Get-Command -type cmdlet
这个例子中, "cmdlet"是传递给形参-type的实参. 然而, 下个例子中, -type被当作一个是参处理:
Get-Command "-type" cmdlet
PowerShell试图使用"-type"的值作为第一个位置参数(positional parameter), 第二个实参"cmdlet"将被当作形参名称, 因其命令失败.(译者注: 因为不存在叫"-type"的命令)
您还可以参考
需要了解命令语言, 在PowerShell命令提示符中输入:
help about_command_syntax
要了解引号保护的规则, 如输入下的命令:
help about_quoting_rules