Проблема в том, «какой конец конвейера, использующего встроенные модули, выполняется исходным процессом?»
В zsh похоже, что последняя команда в конвейере выполняется сценарием основной оболочки, когдакоманда является функцией или встроенной.
В Bash (и sh, вероятно, будет ссылкой на Bash, если вы работаете в Linux), либо обе команды выполняются в под-оболочке, либопервая команда запускается основным процессом, а остальные - вложенными оболочками.
Очевидно, что когда функция запускается в вспомогательной оболочке, она не влияет на переменную в родительской оболочке (толькоglobal в вложенной оболочке).
Попробуйте добавить дополнительный тест:
echo Something | { myfunc; echo $globvar; }
echo $globvar