3

我正在查看此处发布的 PowerShell 语法:http: //www.manning.com/payette/AppCexcerpt.pdf

(我认为它自 PowerShell v1 以来没有更新,并且存在一些拼写错误。所以,它显然不是真正的PowerShell 语法,而是一个以人为本的文档。)

在 C.2.1 节中,它说:

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

问号的含义是什么?我不知道它的意思是“匹配任何字符”还是“匹配问号”或者是拼写错误。

我不确定这是要匹配的输入,但也许是这样的:

$a,$b = 1, 2

在这种情况下,问号应该是逗号?

4

1 回答 1

1

根据其在上述规则 ( <assignmentStatementRule> = <lvalueExpression> <AssignmentOperatorToken> <pipelineRule>) 中的使用,似乎lvalueExpressionWindows 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 = 1array-literal-expressionfor $a,$b,$c = 1,2,3) 等之外的所有可赋值表达式。

于 2012-09-15T23:36:23.583 回答