about_Break
Краткое описание
Описывает инструкцию break
, которая предоставляет способ выхода из текущего блока управления.
Подробное описание
Оператор break
предоставляет способ выхода из текущего блока управления.
Выполнение продолжается в следующей инструкции после блока управления. Инструкция поддерживает метки. Метка — это имя, назначаемое инструкции в скрипте.
Использование break
циклов
break
Когда оператор отображается в цикле, например foreach
цикл , for
do
или while
цикл, PowerShell немедленно выходит из цикла.
Инструкция break
может включать метку, которая позволяет выйти из внедренных циклов. Метка может указать любое ключевое слово цикла, например foreach
, for
или while
в скрипте.
В следующем примере показано, как использовать break
инструкцию для выхода из инструкции for
:
for($i=1; $i -le 10; $i++) {
Write-Host $i
break
}
В этом примере оператор завершает for
цикл, break
когда $i
переменная равна 1. Несмотря на то, что for
оператор оценивается как True , пока $i
не превышает 10, PowerShell достигает инструкции останова при первом for
запуске цикла.
Чаще всего используется break
оператор в цикле, где должно выполняться внутреннее условие. Рассмотрим следующий foreach
пример инструкции:
$i=0
$varB = 10,20,30,40
foreach ($val in $varB) {
if ($val -eq 30) {
break
}
$i++
}
Write-Host "30 was found in array index $i"
В этом примере foreach
инструкция выполняет итерацию массива $varB
. Оператор if
вычисляет значение False в первый раз, когда выполняется цикл, и переменная $i
увеличивается на 1. Третий раз, когда цикл выполняется, $i
равен 2, а $val
переменная равна 30. На этом этапе break
оператор выполняется, а foreach
цикл завершается.
Использование метки break
в цикле
Инструкция break
может включать метку. Если вы используете ключевое break
слово с меткой, PowerShell завершает цикл с меткой вместо выхода из текущего цикла.
Метка — это двоеточие, за которым следует назначить имя. Метка должна быть первым маркером в операторе, за которым следует ключевое слово цикла, например while
.
break
перемещает выполнение из цикла с меткой. В внедренных циклах это имеет другой результат, чем break
ключевое слово, если оно используется самостоятельно. В этом примере есть оператор с оператором while
for
:
:myLabel while (<condition 1>) {
for ($item in $items) {
if (<condition 2>) {
break myLabel
}
$item = $x # A statement inside the For-loop
}
}
$a = $c # A statement after the labeled While-loop
Если условие 2 оценивается как True, выполнение скрипта пропускается до инструкции после помеченного цикла. В примере выполнение начинается снова с инструкции $a = $c
.
Можно вложить много помеченных циклов, как показано в следующем примере.
:red while (<condition1>) {
:yellow while (<condition2>) {
while (<condition3>) {
if ($a) {break}
if ($b) {break red}
if ($c) {break yellow}
}
Write-Host "After innermost loop"
}
Write-Host "After yellow loop"
}
Write-Host "After red loop"
$b
Если переменная оценивается как True, выполнение скрипта возобновляется после цикла, помеченного красным цветом. $c
Если переменная оценивается как True, выполнение элемента управления скриптом возобновляется после цикла, помеченного как "желтый".
$a
Если переменная оценивается как True, выполнение возобновляется после самого внутреннего цикла. Метка не требуется.
PowerShell не ограничивает, насколько далеко метки могут возобновить выполнение. Метка может даже передавать контроль между границами вызовов скриптов и функций.
Использование break
в инструкции switch
switch
В конструкции break
PowerShell завершает switch
блок кода.
Ключевое break
слово используется для выхода из switch
конструкции. Например, следующая switch
инструкция использует break
инструкции для проверки наиболее конкретного условия:
$var = "word2"
switch -regex ($var) {
"word2" {
Write-Host "Exact" $_
break
}
"word.*" {
Write-Host "Match on the prefix" $_
break
}
"w.*" {
Write-Host "Match on at least the first letter" $_
break
}
default {
Write-Host "No match" $_
break
}
}
В этом примере $var
переменная создается и инициализирована в строковое значение word2
. Оператор switch
использует класс Regex для сопоставления значения переменной в первую очередь с термином word2
. Так как значение переменной и первый тест в операторе switch
совпадают, выполняется первый блок кода в инструкции switch
.
Когда PowerShell достигнет первой break
инструкции, switch
оператор завершает работу. Если из примера удаляются четыре break
оператора, выполняются все четыре условия. В этом примере оператор используется break
для отображения результатов при выполнении наиболее конкретного условия.
Использование break
в инструкции trap
Если окончательный оператор, выполняемый в тексте инструкции trap
, является break
, объект ошибки подавляется, и исключение создается повторно.
В следующем примере создается исключение DivideByZeroException , которое находится в ловушке с помощью инструкции trap
.
function test {
trap [DivideByZeroException] {
Write-Host 'divide by zero trapped'
break
}
$i = 3
'Before loop'
while ($true) {
"1 / $i = " + (1 / $i--)
}
'After loop'
}
test
Обратите внимание, что выполнение останавливается при исключении. Никогда After loop
не достигается.
Исключение создается повторно после trap
выполнения.
Before loop
1 / 3 = 0.333333333333333
1 / 2 = 0.5
1 / 1 = 1
divide by zero trapped
Attempted to divide by zero.
At line:10 char:6
+ "1 / $i = " + (1 / $i--)
+ ~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [], ParentContainsErrorRecordException
+ FullyQualifiedErrorId : RuntimeException
Не используйте break
вне цикла или switch
trap
Если break
используется вне конструкции, которая напрямую поддерживает его (циклы, switch
, ), trap
PowerShell ищет стек вызовов для заключающей конструкции. Если он не может найти заключенную конструкцию, текущее пространство выполнения будет тихо завершено.
Это означает, что функции и сценарии, которые непреднамеренно используют break
вне заключающей конструкции, поддерживающей ее, могут случайно завершить их вызывающие объекты.
Использование break
внутри конвейера break
, например ForEach-Object
блока скрипта, не только завершает конвейер, он потенциально завершает весь пространство выполнения.
См. также
PowerShell