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>前のルール( )での使用に基づくと、 Windows PowerShell in ActionlvalueExpression付録Cは、JoeyがリンクしたPowerShell言語仕様のセクションB.2.3に対応しているようです。これよりもさらに一致させるのは難しいですが、とにかくいくつかの推測を追加します:)expression

?文字は[? |? <lvalue>]*間違いである可能性が非常に高いです。「前のトークンはオプションです」を表すために使用されていた場合、次のようになります。

  • 適用されたトークン[|トークンは引用されている必要があります
  • [値式の一部としてのみ意味がありますが、インデックス付けは後でpropertyOrArrayReferenceOperatorルールによってすでにカバーされています
  • ?文法の他の場所では使用されませんが、 「0回または1回表示される可能性が{0|1} ある」ことを示すために複数回使用されます

セクションの最初のルールの最後にあるものと類似していることを考えると[ '|' <cmdletCall> ]*、これはコピーアンドペーストエラーであり、「スマートクォート」ラウンドトリップエンコーディングエラーが複合されている可能性があります。これが後で編集する目的でコピーされたと仮定すると、複数のプロパティアクセスを表す?|?ようになった可能性があります(ただし、これもルールでカバーされています)。'.'propertyOrArrayReferenceOperator

セクションC.2.1の最後にある「[パイプラインルール]は代入式の解析も処理する」というステートメントに基づいていますが、おそらく、 (たとえば、for )lvalueExpression以外のすべての割り当て可能な式をリストすることを目的としていました。simpleLvaluecast-expression[int]$x = 1array-literal-expression$a,$b,$c = 1,2,3

于 2012-09-15T23:36:23.583 に答える