我正在审核此处发布的PowerShell语法:http://www.manning.com/payette/AppCexcerpt.pdf
(我认为自PowerShell v1以来它没有更新,并且有一些拼写错误。所以,它显然不是真正的 PowerShell语法,而是一个面向人的文档。)
在C.2.1节中,它说:
<lvalueExpression> = <lvalue> [? |? <lvalue>]*
问号是什么意思?我不知道它是否意味着“匹配任何字符”或“匹配问号”或者这是一个错字。
我不确定这是打算匹配的输入,但也许就是这样:
$a,$b = 1, 2
在哪种情况下,问号可能是逗号?
答案 0 :(得分:1)
根据其在上一条规则(<assignmentStatementRule> = <lvalueExpression> <AssignmentOperatorToken> <pipelineRule>
)中的使用情况,Appendix C的Windows PowerShell in Action中的lvalueExpression
似乎与expression相对应The PowerShell Language Specification与Joey相关联的{{3}}的B.2.3 。匹配它比这更困难,但我还是会添加一些推测:)
?
中的[? |? <lvalue>]*
字符很可能是错误的。如果它已用于表示“前一个令牌是可选的”,那么:
[
和|
令牌应该被引用[
作为值表达式的一部分才有意义,但后面的propertyOrArrayReferenceOperator
规则已涵盖索引?
未在语法中的任何其他位置使用,但{0|1}
多次使用以表示“可以显示为零或一次”鉴于该部分中第一条规则末尾与[ '|' <cmdletCall> ]*
的相似性,它可能是一个复制粘贴错误,并且由“智能引用”往返编码错误复杂化。假设这是为了稍后编辑而复制的,那么?|?
可能已成为'.'
来表示多个属性访问(但同样,propertyOrArrayReferenceOperator
规则涵盖了这一点。)
虽然基于 C.2.1 部分末尾的声明“[管道规则]也处理解析赋值表达式”,lvalueExpression
可能是为了列出所有可分配的simpleLvalue
以外的表达式(例如cast-expression
为[int]$x = 1
,array-literal-expression
为$a,$b,$c = 1,2,3
)等。