У меня были некоторые странные проблемы с Bash в последнее время. Пытаясь упростить свой сценарий, я разработал небольшой фрагмент кода:
$ o(){ echo | while read -r; do return 0; done; echo $?;}; o
0
$ o(){ echo | while read -r; do return 1; done; echo $?;}; o
1
return
должен был выйти из функции без печати $?
, не так ли? Ну, тогда я проверил, могу ли я вернуться из трубы в одиночку:
$ echo | while read -r; do return 1; done
bash: return: can only `return' from a function or sourced script
То же самое происходит без while
цикла:
$ foo(){ : | return 1; echo "This should not be printed.";}
$ foo
This should not be printed.
Есть что-то, чего я здесь не хватает? Поиск Google не принес ничего об этом! Моя версия bash - 4.2.37 (1) -релиз на Debian Wheezy.
while
не нужны для воспроизведения? Это отвлекает от сути.
while
Цикл - это очень распространенное использование для канала с return
. Второй пример более прямолинеен, но я не верю, что кто-то когда-либо будет его использовать ...