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」と表示されました。 つまり「エラーにはならないけど条件式は正しく機能しない」ことになります。 ですから{}波括弧は忘れないでください。