根据其在上述规则 ( <assignmentStatementRule> = <lvalueExpression> <AssignmentOperatorToken> <pipelineRule>
) 中的使用,似乎lvalueExpression
在Windows PowerShell in Action的附录 C中对应于Joey链接到的The PowerShell Language Specification 的B.2.3节。比这更进一步匹配它是困难的,但无论如何我会添加一些猜测:)expression
中的?
字符[? |? <lvalue>]*
很可能是错误的。如果它被用来表示“前一个标记是可选的”,那么:
- 它所应用的
[
和|
标记应该被引用
- 仅
[
作为值表达式的一部分才有意义,但该propertyOrArrayReferenceOperator
规则稍后已经涵盖了索引
?
不在语法中的其他任何地方使用,但多次用于表示“可以出现零次或一次{0|1}
”
鉴于它与本节中第一条规则末尾的相似性[ '|' <cmdletCall> ]*
,它可能是一个复制粘贴错误,加上一个“智能引用”往返编码错误。假设这是为了稍后编辑而复制的,那么?|?
可能已经成为'.'
表示多个属性访问(但同样,这已被propertyOrArrayReferenceOperator
规则涵盖)。
虽然基于第C.2.1节末尾的声明“[管道规则] 也处理解析赋值表达式”,lvalueExpression
但可能是为了列出除simpleLvalue
(例如cast-expression
for [int]$x = 1
、array-literal-expression
for $a,$b,$c = 1,2,3
) 等之外的所有可赋值表达式。