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