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

PowerShell