Все компоненты конвейера (если их больше одного) выполняются в подоболочке, и их назначения переменных не сохраняются в основной оболочке.
Причина этого в том, что bash не поддерживает реальную многопоточность(с одновременным доступом к переменным), только подпроцессы, которые работают параллельно.
Как этого избежать :
Вы должны выполнять любые назначения переменных, которые вы хотитесохранить в main bash (или найти способ перенести их туда).Основным способом сделать это было бы не использовать канал, а вместо этого использовать подстановку процесса:
f > >( cat )
Конечно, это не поможет, если вам нужно назначать переменные в обоих процессах канала.Тогда вам нужно подумать о лучшем механизме (может быть, обрабатывать и выводить переменные куда-нибудь?)