我正在查看此处发布的 PowerShell 语法:http://www.manning.com/payette/AppCexcerpt.pdf
(我认为它自 PowerShell v1 以来就没有更新过,并且有一些错别字。所以,这显然不是真正的 PowerShell 语法,而是一个面向人的文档。)
在 C.2.1 节中,它说:
<lvalueExpression> = <lvalue> [? |? <lvalue>]*
问号的含义是什么?我不知道它的意思是“匹配任何字符”还是“匹配问号”还是打字错误。
我不确定这是为了匹配什么输入,但也许是这样的:
$a,$b = 1, 2
在哪种情况下问号应该是逗号?
最佳答案
根据它在前面的规则 ( <assignmentStatementRule> = <lvalueExpression> <AssignmentOperatorToken> <pipelineRule>
) 中的使用,看起来 lvalueExpression
在 Appendix C的 Windows PowerShell in Action对应expression
在 The PowerShell Language Specification 的 B.2.3 部分中那Joey链接到。比这更匹配它是困难的,但我还是会添加一些猜测:)
?
[? |? <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
等)。
关于parsing - 在 PowerShell 语法中, `lvalueExpression` 规则说的是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11958941/