Quando você coloca um "| tee", o shell que está interpretando o script está bifurcando um novo shell para o loop. Inserir uma suspensão no loop e iniciar o script em segundo plano fornece essa lista de processos:
PID TTY TIME COMMAND
21168 pts/0 0:00 sh
21259 pts/0 0:00 ps
11962 pts/0 0:00 sh
21170 pts/0 0:00 sleep
21171 pts/0 0:00 tee
21169 pts/0 0:00 sh
Como você pode ver, há um shell adicional no final da lista. Você pode obter o mesmo resultado com este script:
STATUS=9
echo "" > /tmp/ses.txt
for SESSION in A B C
do
STATUS=5
echo "SESSION=$SESSION STATUS=$STATUS" | tee -a /tmp/ses.txt
done
echo "STATUS=$STATUS"
mas sem o efeito colateral que você está mencionando.