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 言語仕様で言語文法を調べましたが、表示されません。なぜこれは式ではなくコマンドなのですか?