while [ condition ]
do
op1
op2
done
и еще надо вспомнить, кажется в коде выше будет subshell, внутри него присвоение и потом выход. ясное дело, что в родительском шелле это присвоение никак не отразится.
кстати, "упрощенный код" какой-то бессмысленный и беспощадный.