"./tmp/x" ist ja auch falsch. "._/tmp/x", also mit Leerzeichen. Da das Script in der gleichen Shell läuft, bleiben die Werte erhalten.
Nutzt Du eine Schleife mit eval, darf's natürlich nicht "while read x" sein. Da wird eine neue Shell aufgemacht (ist allerdings auch Shellabhängig, z.B. mit der...