cat
сам не пишет в файл, только в стандартный вывод. Переадресация оболочки >
делает запись.
Проблема с вашим утверждением состоит в том, что cat
принимает список имен файлов в качестве параметра, поэтому cat $variable
попытается напечатать содержимое файла, имя которого хранится в $variable
, который, скорее всего, не существует.
Чтобы записать содержимое переменной в файл, используйте echo $variable >t.h