2012-08-14 53 views
2

我正在审查的PowerShell语法张贴在这里:http://www.manning.com/payette/AppCexcerpt.pdf在PowerShell的语法,什么是该`lvalueExpression`规则在说什么?

(我不认为因为PowerShell的第一版已经更新,并有一些错别字所以,这显然不是真正 PowerShell的语法,而是一个。 。人性化的文件)

在第C.2.1,它说:

<lvalueExpression> = <lvalue> [? |? <lvalue>]* 

什么是问号的意思吗?我无法分辨它是否意味着“匹配任何字符”或“匹配问号”或它是一个错字。

我不知道什么样的输入,这是一种旨在匹配,但也许那就是:

在这种情况下
$a,$b = 1, 2 

也许问号应该是一个逗号?

+3

实际语法可以在[PowerShell的语言规范]中找到(http://www.microsoft.com/en-us/download/details.aspx?id=9706)。帕耶特书中的那个也有一些错误。 – Joey 2012-08-14 19:00:32

+0

语法第3版可以在这里找到:http://www.microsoft.com/en-us/download/confirmation.aspx?id = 36389 – 2015-03-19 14:56:27

+0

令人惊叹的是,在Payette的语法中有多少错误和遗漏。显然他从来没有试图实现自己的语法。 – 2015-03-31 14:31:44

回答

1

基于其在前述规则(<assignmentStatementRule> = <lvalueExpression> <AssignmentOperatorToken> <pipelineRule>)使用,似乎lvalueExpressionWindows PowerShell in ActionAppendix C对应于expressionThe PowerShell Language Specification B.2.3该Joey挂。匹配它比这更难,但我会添加一些猜测无论如何:)

[? |? <lvalue>]*中的?字符很可能是错误的。如果它被用来表示“以前的标记是可选的”,则:

  • [|令牌其应用于应该被引用
  • 只有[是有意义的值表达式的一部分,但索引已经后来被propertyOrArrayReferenceOperator规则
  • ?不使用其他任何地方语法覆盖,但{0|1}多次使用,表示“可以出现零次或一次”

鉴于其相似[ '|' <cmdletCall> ]*在部分中第一个统治的结束,它可能已被复制和粘贴错误,由‘智能报价’往返编码错误加剧。假设这是与编辑后的意图复制,然后被?|?可能已成为'.'来表示多个属性访问(但再次,这是由propertyOrArrayReferenceOperator规则覆盖)。

尽管基于声明的部分结束C.2.1说:“[管道规则]也处理解析赋值表达式”,lvalueExpression,可能是为了列出所有的可分配表情除了simpleLvalue(如cast-expression[int]$x = 1array-literal-expression$a,$b,$c = 1,2,3)等)。