about_Operator_Precedence

簡単な説明

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

長い説明

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

演算子の優先順位が等しい場合、PowerShell は式内に出現する演算子を左から右に評価します。 例外は、代入演算子、キャスト演算子、および否定演算子 (!-not-bnot) であり、右から左に評価されます。

括弧をはじめとする括り文字を使用することで、標準の優先順位を無視して、囲まれた部分を先に評価するように PowerShell に命令することができます。

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

[演算子] 列には、演算子が一覧表示されます。 [参照] 列には、オペレーターが説明されている PowerShell ヘルプ トピックが一覧表示されます。 トピックを対話形式で表示するには、 Get-Help -Name <topic-name>を使用します。

オペレーター リファレンス
$() @() () @{} about_Operators
. ?. (メンバーアクセス) about_Operators
:: (静的) about_Operators
[0] ?[0] (インデックス演算子) about_Operators
[int] (キャスト演算子) about_Operators
-split (単項) about_Split
-join (単項) about_Join
, (コンマ演算子) about_Operators
++ -- 代入演算子について
! -not about_Logical_Operators
.. (範囲演算子) about_Operators
-f (書式演算子) about_Operators
- (単項/負) 算術演算子について
* / % 算術演算子について
+ - 算術演算子について

次の演算子のグループは、同じ優先順位を持っています。 ケース感度があるバリアントと明示的なケース非感度のバリアントは、同じ優先順位を持っています。

オペレーター リファレンス
-split (バイナリ) about_Split
-join (バイナリ) about_Join
-is -isnot -as about_Type_Operators
-eq -ne -gt -ge -lt -le 比較演算子について
-like -notlike 比較演算子について
-match -notmatch 比較演算子について
-in -notIn 比較演算子について
-contains -notcontains 比較演算子について
-replace 比較演算子について

ここから、次の演算子が優先順位に従って紹介されます。

オペレーター リファレンス
-band -bnot -bor -bxor -shr -shl 算術演算子について
-and -or -xor about_Logical_Operators

次の項目は true 演算子ではありません。 これらは、式の構文ではなく、PowerShell のコマンド構文の一部です。 割り当ては、常に最後に行われるアクションです。

SYNTAX リファレンス
. (ドット ソース) about_Operators
& (呼び出し) about_Operators
? <if-true> : <if-false> (三項演算子) about_Operators
?? (null 合体演算子) about_Operators
| (パイプライン演算子) about_Operators
> >> 2> 2>> 2>&1 about_Redirection
&& || (パイプライン チェーン演算子) about_Operators
= += -= *= /= %= ??= 代入演算子について

例示

次の 2 つの例は、算術演算子と、かっこを使用して PowerShell に式の囲まれた部分を最初に評価させる効果を示しています。

PS> 2 + 3 * 4
14

PS> (2 + 3) * 4
20

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

$readOnly = Get-ChildItem -Path *.txt | Where-Object { $_.IsReadOnly }

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

$readOnly = (Get-ChildItem -Path *.txt | Where-Object { $_.IsReadOnly })

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

次の例は、インデックス演算子がキャスト演算子よりも優先されることを示しています。

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

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

この式では、括弧を使用してキャスト操作をインデックスの選択より先に行わせます。 その結果、配列全体が (単一の) 文字列としてキャストされます。 次に、インデックス演算子は、文字列配列の最初の項目 (最初の文字) を選択します。

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

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

PS> 2 -gt 4 -and 1
False

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

PS> (2 -gt 4) -and 1
False

-and演算子の優先順位が高い場合、結果は TRUE になります。

PS> 2 -gt (4 -and 1)
True

ただし、この例では、オペレーターの優先順位を管理するための重要な原則を示します。 式が解釈するのが難しい場合は、既定の演算子の優先順位を強制する場合でも、かっこを使用して評価順序を強制します。 かっこを使用すると、スクリプトを読み保守を行う人物に対して意図が明確になります。

次の例では、 -and-or 論理演算子の優先順位を示します。

PS> $true -or $false -and $false
False

C# などの他の言語では、通常、論理 AND の方が論理 OR よりも優先順位が高いので、上記の式で TRUE が生成される可能性があります。

ただし、PowerShell では、 -and 演算子と -or 演算子の優先順位が同じです。 これらは、式内に表示される左から右に評価されます。 $true -or $falseは TRUE で、$true -and $falseは FALSE であるため、式の結果は FALSE になります。

Important

WMI クエリ言語 (WQL) や Active Directory フィルターなどの PowerShell 内の他のコンテキストには、PowerShell 論理演算子の優先順位とは異なる可能性がある独自の演算子の優先順位があります。

こちらも参照ください