PowerShell: switch文の条件式で比較演算子を使う
PowerShellのswitch文では、 比較演算子を使った条件式を記述することもできます。 これにより、「-gt, -ge, -lt, -le」などを使った比較演算をもとに 処理を分岐することが可能です。 その場合、シンプルな値を条件とする場合とは少し異なる書式になります。
まずはシンプルな値を条件とする場合のswitch文の書式です。
書式
switch (評価式) { 値1 { 処理1; break } 値2 { 処理2; break } 値3 { 処理3; break } ... Default {処理} }
次は比較演算子を使った条件式の場合のswitch文の書式です。
書式
switch (評価式) { {条件式1} { 処理1; break } {条件式2} { 処理2; break } {条件式3} { 処理3; break } ... Default {処理} }
注意点は条件式を{}波括弧で囲むことです。 ()丸括弧ではありません。 ただしこのままだと条件式部分と処理部分がどちらも{}波括弧で 囲まれています。 条件部分か処理部分かをわかりやすくするために 次のように条件式部分を()丸括弧で囲むこともできます。
書式
# ()丸括弧ありのバージョン switch (評価式) { ({条件式1}) { 処理1; break } ({条件式2}) { 処理2; break } ({条件式3}) { 処理3; break } ... Default {処理} }
どちらの方法で書くかは好みの問題です。
次のサンプルコードでは、 switch文の条件式に比較演算子「-gt, -lt, -eq」を使って、 変数$nの値が「10以上、10以下、10」 の場合で処理を分岐しています。 $_には現在評価中の値($n)が格納されます。
PowerShell
$n = 8 switch ($n) { {$_ -gt 10}{ Write-Host "10以上"; break} {$_ -lt 10}{ Write-Host "10以下"; break} {$_ -eq 10}{ Write-Host "10"; break} Default {Write-Host "other"} } # 実行結果 10以下
条件式の部分を()丸括弧で囲ってもOKです。
switch ($n) { ({$_ -gt 10}){ Write-Host "10以上"; break} ({$_ -lt 10}){ Write-Host "10以下"; break} ({$_ -eq 10}){ Write-Host "10"; break} Default {Write-Host "other"} }
試しに、条件式の()丸括弧の中にある{}波括弧を書かずに実行してみると
どうなるでしょうか?
$n = 8とした場合の実行結果は次の通りです。
$n = 8 switch ($n) { ($_ -gt 10){ Write-Host "10以上"; break} ($_ -lt 10){ Write-Host "10以下"; break} ($_ -eq 10){ Write-Host "10"; break} Default {Write-Host "other"} } # 実行結果 other
エラーは発生せずに、実行結果が「other」と表示されました。 つまり「エラーにはならないけど条件式は正しく機能しない」ことになります。 ですから{}波括弧は忘れないでください。