根据其在上述规则 ( <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-expressionfor [int]$x = 1、array-literal-expressionfor $a,$b,$c = 1,2,3) 等之外的所有可赋值表达式。