Руководство пользователя для GNU Awk
9. Управляющие операторы в действиях
9.5 Оператор break
Оператор прерывания break выводит из циклов for, while или do, в которых он находится. Следующий пример находит наименьший делитель любого целого и отмечает простые числа:
awk '# находит наименьший делитель для num
- num = $1
for (div = 2; div*div != num; div++)
if (num % div == 0)
break if (num % div == 0)
printf "Smallest divisor of %d is %d"n", num, div else
printf "%d is prime"n", num ""'
Если в первом операторе if остаток равен нулю, awk немедленно прерывает цикл for. Это означает переход к оператору, непосредственно следующему за циклом и продолжение обработки. (Это совершенно не похоже на оператор exit, который прекращает выполнение программы awk. См. раздел 9.9 [Оператор exit], стр. 112.)
Вот другой пример программы, эквивалентной предыдущей. Он иллюстрирует, как condition цикла for или while можно заменить на оператор break внутри оператора if:
awk '# находит наименьший делитель для num
- num = $1
for (div = 2; ; div++) -
if (num % div == 0) -
printf "Smallest divisor of %d is %d"n", num, div break "" if (div*div ? num) -
printf "%d is prime"n", num break "" "" ""'
Выше уже говорилось, что оператор break не имеет смысла, если расположен вне тела цикла. Однако, хотя это нигде не документировано, по традиции реализации awk рассматривали оператор break вне цикла как оператор next (см. раздел 9.7 [оператор next], стр. 111). Последние версии Unix awk больше не разрешают такое употребление. gawk поддержит такое употребление, если в командной строке будет указан параметр `--traditional' (см. раздел 14.1 [Параметры командной строки], стр. 161).
В противном случае оно будет рассматриваться как синтаксическая ошибка, поскольку стандарт POSIX указывает, что break может использоваться только внутри тела цикла (d.c.).
Назад | Вперед
Содержание (общее) | Содержание раздела
Если Вы не нашли что искали, то рекомендую воспользоваться поиском по сайту:
|