У меня проблемы с пониманием поведения встроенной функции return
в bash. Вот пример сценария.
#!/bin/bash
dostuff() {
date | while true; do
echo returning 0
return 0
echo really-notreached
done
echo notreached
return 3
}
dostuff
echo returncode: $?
Результатом этого сценария является:
returning 0
notreached
returncode: 3
Если, однако, дата |
удалить из строки 4, результат будет таким, как я ожидал:
returning 0
returncode: 0
Кажется как и оператор return
, использованный выше, действует так, как я думал, что оператор break
должен вести себя, но только тогда, когда цикл находится на правой стороне канала. Почему это так? Я не мог найти ничего, что могло бы объяснить такое поведение на странице руководства bash или в Интернете. Скрипт действует одинаково в bash 4.1.5 и dash 0.5.5.