3

PowerShell で、論理演算子を含むステートメントがどのように解析されるかを確認します。

> $ast = [System.Management.Automation.Language.Parser]::ParseInput( "($true) -and ($false)", [ref]$null, [ref]$null)
> $ast.EndBlock.Statements[0].PipelineElements[0].GetType().Name
CommandExpressionAst
> $ast.EndBlock.Statements[0].PipelineElements[0].式


オペレーター : そして
左:(真)
右:(誤)
ErrorPosition : -および
StaticType : System.Boolean
範囲 : (True) -and (False)
Parent : (True) -and (False)

予想どおり、AST はこれを 2 項式と見なします。ただし、括弧を削除すると、コマンドとして解析されます。

> $true または $false
真実

> $ast = [System.Management.Automation.Language.Parser]::ParseInput( "$true -or $false", [ref]$null, [ref]$null)
> $ast.EndBlock.Statements[0].PipelineElements[0].Gettype().Name
CommandAst

> $ast.EndBlock.Statements[0].PipelineElements[0].CommandElements


StringConstantType : BareWord
値: 真
StaticType : System.String
範囲 : 真
親 : True または False

ParameterName : または
口論 :
ErrorPosition : -または
範囲 : -または
親 : True または False

StringConstantType : BareWord
値: 偽
StaticType : System.String
範囲 : False
親 : True または False

公式の PowerShell 言語仕様で言語文法を調べましたが、表示されません。なぜこれは式ではなくコマンドなのですか?

4

1 に答える 1