2012-08-14 54 views
2

我正在審查的PowerShell語法張貼在這裏:http://www.manning.com/payette/AppCexcerpt.pdf在PowerShell的語法,什麼是該`lvalueExpression`規則在說什麼?

(我不認爲因爲PowerShell的第一版已經更新,並有一些錯別字所以,這顯然不是真正 PowerShell的語法,而是一個。 。人性化的文件)

在第C.2.1,它說:

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

什麼是問號的意思嗎?我無法分辨它是否意味着「匹配任何字符」或「匹配問號」或它是一個錯字。

我不知道什麼樣的輸入,這是一種旨在匹配,但也許那就是:

在這種情況下
$a,$b = 1, 2 

也許問號應該是一個逗號?

+3

實際語法可以在[PowerShell的語言規範]中找到(http://www.microsoft.com/en-us/download/details.aspx?id=9706)。帕耶特書中的那個也有一些錯誤。 – Joey 2012-08-14 19:00:32

+0

語法第3版可以在這裏找到:http://www.microsoft.com/en-us/download/confirmation.aspx?id = 36389 – 2015-03-19 14:56:27

+0

令人驚歎的是,在Payette的語法中有多少錯誤和遺漏。顯然他從來沒有試圖實現自己的語法。 – 2015-03-31 14:31:44

回答

1

基於其在前述規則(<assignmentStatementRule> = <lvalueExpression> <AssignmentOperatorToken> <pipelineRule>)使用,似乎lvalueExpressionWindows PowerShell in ActionAppendix C對應於expressionThe PowerShell Language Specification B.2.3該Joey掛。匹配它比這更難,但我會添加一些猜測無論如何:)

[? |? <lvalue>]*中的?字符很可能是錯誤的。如果它被用來表示「以前的標記是可選的」,則:

  • [|令牌其應用於應該被引用
  • 只有[是有意義的值表達式的一部分,但索引已經後來被propertyOrArrayReferenceOperator規則
  • ?不使用其他任何地方語法覆蓋,但{0|1}多次使用,表示「可以出現零次或一次」

鑑於其相似[ '|' <cmdletCall> ]*在部分中第一個統治的結束,它可能已被複制和粘貼錯誤,由‘智能報價’往返編碼錯誤加劇。假設這是與編輯後的意圖複製,然後被?|?可能已成爲'.'來表示多個屬性訪問(但再次,這是由propertyOrArrayReferenceOperator規則覆蓋)。

儘管基於聲明的部分結束C.2.1說:「[管道規則]也處理解析賦值表達式」,lvalueExpression,可能是爲了列出所有的可分配表情除了simpleLvalue(如cast-expression[int]$x = 1array-literal-expression$a,$b,$c = 1,2,3)等)。