about_Operator_Precedence

適用対象: Windows PowerShell 2.0, Windows PowerShell 3.0, Windows PowerShell 4.0, Windows PowerShell 5.0

トピック

about_Operator_Precedence

概要

Windows PowerShell の演算子を優先順位の順に一覧表示します。

(このトピックはオンタリオ州オタワの Windows PowerShell MVP である Kirk Munro から寄稿されました)

詳細説明

Windows PowerShell の演算子を使用して、単純で強力な式を作成できます。このトピックでは、演算子を優先順位の順に一覧表示します。優先順位とは、同じ式に複数の演算子が含まれる場合に Windows PowerShell が演算子を評価する順序のことです。

演算子の優先順位が等しい場合、Windows PowerShell はそれらを左から右に向かって評価します。例外は、代入演算子、キャスト演算子、および否定演算子 (!、-not、-bnot) です。これらは、右から左に向かって評価されます。

かっこなどの囲い文字を使用することで、標準の優先順位を上書きし、式の囲まれていない部分より先に囲まれている部分を評価することを Windows PowerShell に強制できます。

次の一覧では、演算子を評価される順序で示します。同じ行または同じグループ内の演算子は、同じ優先順位を持っています。

「演算子」列には、演算子を示します。「参照」列には、各演算子の説明を含む Windows PowerShell のヘルプ トピックを示します。トピックを表示するには、「get-help <topic-name>」と入力してください。

    OPERATOR                         REFERENCE 
    --------                         ---------

    $()  @()                         about_Operators

    . (dereference) :: (static)      about_Operators

    [0] (index operator)             about_Operators

    [int] (cast operators)           about_Operators
 
    -split (unary) -join (unary)     about_Split, about_Join

    , (comma operator)               about_Operators

    ++ --                            about_Assignment_Operators
 
    -not ! -bNot                     about_Logical_Operators, about_Comparison_Operators

    .. (range operator)              about_Operators
   
    -f (format operator)             about_Operators 
   
    * / %                            about_Arithmetic_Operators
 
    + -                              about_Arithmetic_Operators

次の演算子のグループは、同じ優先順位を持っています。これらの大文字と小文字を区別する別形や、大文字と小文字を明示的に区別しない別形も、同じ優先順位を持っています。

    -split (binary)                  about_Split
    -join (binary)                   about_Join
    -is  -isnot  -as                 about_Type_Operators
    -eq  -ne  -gt  -gt  -lt  -le     about_Comparison_Operators
    -like  -notlike                  about_comparison_operators
    -match  -notmatch                about_comparison_operators
    -in -notIn                       about_comparison_operators
    -contains -notContains           about_comparison_operators
    -replace                         about_comparison_operators

これ以降は、再び各演算子を優先順位の順に一覧表示します。

    -band -bor -bxor                 about_Comparison_Operators

    -and -or -xor                    about_Comparison_Operators

    . (dot-source)  & (call)         about_Scopes, about_Operators

    | (pipeline operator)            about_Operators

    >  >>  2>  2>>  2>&1             about_Redirection

    =  +=  -=  *=  /= %=             about_Assignment_Operators

次の 2 つのコマンドは、算術演算子と、かっこを使用して式の囲まれている部分を先に評価することを Windows PowerShell に強制した場合の効果を示しています。

        C:\PS> 2 + 3 * 4
        14
        
        C:\PS> (2 + 3) * 4
        20

次の例では、ローカル ディレクトリから読み取り専用のテキスト ファイルを取得し、それらを $read_only 変数に保存しています。

        $read_only = get-childitem *.txt | where-object {$_.isReadOnly}

これは、次の例と同等です。

        $read_only = ( get-childitem *.txt | where-object {$_.isReadOnly} )

パイプライン演算子 (|) は代入演算子 (=) より高い優先順位を持っているため、Get-ChildItem コマンドレットで取得したファイルは、Where-Object コマンドレットに送信され、フィルター処理されてから、$read_only 変数に代入されます。

次の例は、キャスト演算子よりインデックス演算子の方が優先されることを示しています。最初の式では、3 つの文字列からなる配列が作成されます。次に、値 0 を持つインデックス演算子を使用して、配列内の最初のオブジェクト (最初の文字列) が選択されます。最後に、選択されたオブジェクトが文字列としてキャストされます。この場合、キャストの効果はありません。

        C:\PS> [string]@('Windows','PowerShell','2.0')[0]
        Windows

2 つ目の式では、かっこを使用して、インデックス選択の前にキャスト操作が強制的に実行されます。その結果、配列全体が (1 つの) 文字列としてキャストされます。次に、インデックス演算子によってこの文字列配列内の最初の項目 (最初の文字列) が選択されます。

        C:\PS> ([string]@('Windows','PowerShell','2.0'))[0]
        W

次の例では、-and (論理 AND) 演算子よりも -gt (大なり) 演算子の方が優先順位が高いため、式の結果は FALSE になります。

        C:\PS> 2 -gt 4 -and 1
        False 

これは、次の式と同等です。

        C:\PS> (2 -gt 4) -and 1
        False 

もし -and 演算子の方が優先順位が高ければ、答えは TRUE になります。

        C:\PS> 2 -gt (4 -and 1)
        True 

しかし、この例は演算子の優先順位の管理における重要な原則を示しています。式が解釈しにくい場合は、かっこを使用して評価順序を強制してください。これは、既定の演算子の優先順位を強制する場合も含みます。かっこを使用することで、スクリプトを読む人や保守担当者に対して意図を明確に示すことができます。

関連項目

about_Assignment_Operators

about_Comparison_Operators

about_Join

about_Logical_Operators

about_Operators

about_Redirection

about_Scopes

about_Split

about_Type_Operators