Я розумію, що це стара публікація, але я дуже часто повертаюся до цієї теми, оскільки це один із найкращих результатів пошуку при пошуку цієї теми. Однак я завжди залишаю більше заплутаним, ніж тоді, коли приїхав через конфліктну інформацію. Зрештою, мені завжди доводиться робити власні тести, щоб зрозуміти це. Тож цього разу я опублікую свої висновки.
Вихід: це "вийде" з поточного контексту. Якщо ви зателефонуєте до цієї команди зі скрипту, вона вийде із сценарію. Якщо ви викликаєте цю команду з оболонки, вона вийде з оболонки.
Якщо функція викликає команду Exit, вона вийде з будь-якого контексту, в якому вона запущена. Тож якщо ця функція буде викликана тільки з запущеного сценарію, вона вийде з цього сценарію. Однак якщо ваш скрипт просто оголошує функцію, щоб вона могла бути використана з поточної оболонки, і ви запустите цю функцію з оболонки, вона вийде з оболонки, оскільки оболонка - це контекст, в якому виконується функція, що містить Exit
команду.
Примітка. Якщо ви натиснете правою кнопкою миші на скрипт, щоб запустити його в PowerShell, після запуску сценарію PowerShell автоматично закриється. Це не має нічого спільного з Exit
командою або чим-небудь іншим у вашому сценарії. Це просто поведінка PowerShell за замовчуванням для сценаріїв, які виконуються за допомогою цього конкретного методу запуску сценарію. Те саме стосується пакетних файлів та вікна командного рядка.
Повернення: Це повернеться до попереднього пункту дзвінка. Якщо ви викликаєте цю команду зі скрипту (поза будь-якими функціями), вона повернеться до оболонки. Якщо ви викликаєте цю команду з оболонки, вона повернеться до оболонки (яка є попередньою точкою виклику для однієї команди, запущеної з оболонки). Якщо ви викликаєте цю команду з функції, вона повернеться туди, куди колись ця функція викликалася.
Виконання будь-яких команд після точки виклику, до якої вона повертається, триватиме з цієї точки. Якщо скрипт викликається з оболонки, і він містить Return
команду поза будь-якими функціями, тоді, коли він повертається до оболонки, більше немає команд для запуску, завдяки чому Return
використовуваний таким чином по суті такий же, як Exit
.
Перерва: це вирветься з циклів і перемикаються випадки. Якщо ви викликаєте цю команду, не перебуваючи в циклі або випадку переключення, вона вийде з сценарію. Якщо ви зателефонуєте Break
всередину циклу, який вкладений всередині циклу, він вирветься лише з циклу, в який він був викликаний.
Також є цікава особливість того, Break
де ви можете встановити цикл з міткою, а потім ви можете вийти з цього міченого циклу, навіть якщо Break
команда викликається в межах декількох вкладених груп у межах зазначеного циклу.
While ($true) {
# Code here will run
:myLabel While ($true) {
# Code here will run
While ($true) {
# Code here will run
While ($true) {
# Code here will run
Break myLabel
# Code here will not run
}
# Code here will not run
}
# Code here will not run
}
# Code here will run
}