如下说明是翻译
: 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