Не работает присваивание значения глобальной переменной в функции, чей stdout присваевается другой переменной в качестве значения. Глядите:
$ G=1
$ f2() { (( G++ )); echo 'foo'; };
$ f1() { echo $G; var=`f2`; echo $G; };
$ f1
1
1
$
А должно бы быть 1 2, по идее, т.е. конструкция (( G++ )) не срабатывает, из-за того, что результат echo 'foo' в f1() присваивается var в f2().
Как это можно обойти? Пример реальный, в G хранится оффсет, с которым работает f2(), ожидающая, что на следующем вызове он будет инкрементирован (чего не выходит из-за данной проблемы).