У меня проблемы с пониманием поведения встроенного в bash return
. Вот пример сценария.
#!/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
Если, однако, date |
удаляется из строки 4, вывод будет таким, как я ожидал:
returning 0
returncode: 0
Похоже, что оператор return
, использованный выше, действует так, как я думал, оператор break
должен вести себя, но только тогда, когда цикл находится с правой стороны канала. Почему это так? Я не смог найти ничего, что могло бы объяснить это поведение на странице руководства bash или в Интернете. Сценарий действует одинаково в bash 4.1.5 и dash 0.5.5.