A expansão de $user na linha de comando sudo está acontecendo logo antes do comando touch ser executado. No ambiente que está ativo naquele momento (que provavelmente foi limpo por sudo ), seu valor é indefinido e, portanto, se expande para a cadeia vazia. É aqui que você obtém o arquivo chamado .file de.
Para criar o arquivo com o nome adequado, use aspas duplas em torno do comando touch . Isso garantirá que $user seja expandido antes de sudo ser chamado:
sudo runuser -l test2 -c "touch /home/test2/$user.file"
Nota: não sei o que é runuser . Eu teria usado
sudo -u test2 touch "/home/test2/$user.file"