PowerShell: ネストしたループを一気に抜け出す方法
PowerShellで入れ子にしたループを一気に抜け出す方法を紹介します。 単純なbreak文では内側のループを抜け出すだけですが、 ラベルを使うことで一気に外側のループを抜けることができます。
書式
:ラベル名 for (){
for () {
if (条件式) {break ラベル名}
}
}
ラベルを付ける際は抜け出したいループの前に「:ラベル名」を記述します。 後は通常通りループをネストさせます。 抜け出す場合は「break ラベル名」と記述します。 これでラベルを付けたループを一気に抜け出すことができます。 単に「break」だと内側のループを抜け出すだけです。
上はforステートメントを例に出しましたが、 whileステートメントでも同じように記述します。 do-whileの場合はdoの前に記述します。
次のサンプルコードでは、ネストさせたループをラベルを使って一気に抜け出しています。
外側のループカウンタを$i、内側のループカウンタを$kとして
両方0から2までの間ループします。
そしてif文の条件式で「$iが1かつ$kが1」の時に
「break ラベル」でループを一気に抜け出しています。
:outloop for ($i = 0; $i -lt 3; $i++) {
for ($k = 0; $k -lt 3; $k++) {
Write-Host "$i - $k"
if ($i -eq 1 -and $k -eq 1){
break outloop # 抜け出す
}
}
}
# 実行結果
0 - 0
0 - 1
0 - 2
1 - 0
1 - 1
実行結果から「カウンタ変数$iが1かつ$kが1」の時まで出力され、
以後は抜け出していることが確認できます。