Попробуй это...
stop () {
echo "${1}" 1>&2
exit 1
}
func () {
if $1; then
echo "foo"
else
stop "something went wrong"
fi
}
echo "shell..."
func $1
echo "subshell..."
result=`func $1`
echo "shell..."
echo "result=$result"
Результаты, которые я получаю...
# test_exitsubshell true
shell...
foo
subshell...
shell...
result=foo
# test_exitsubshell false
shell...
something went wrong
Примечания
if
был true
или false
(см. 2 прогона) if
является false
, мы никогда не дойдем до подсхемы.