Вам нужно использовать двойные кавычки, например:
sed -i "1i void $name_main()" "$name_c"
объяснение
Рассмотрим одиночные кавычки:
sed -i '1i void $name_main()' '$name_c'
Оболочка не вмешивается в строки в одинарных кавычках. Они передаются в sed
без изменений. Следовательно, буквенная строка $name_main
появится в выводе. Аналогично, эта команда будет пытаться воздействовать на имя файла $name_c
а не на имя, заданное значением этой переменной оболочки.
Рассмотрим без кавычек:
sed -i 1i void $name_main() $name_c
Без кавычек оболочка выполнит разбиение по словам. Это может вызвать все проблемы. Кроме того, без кавычек оболочка ожидает, что скобки будут запускать подоболочку. Вы тоже этого не хотите.
С двойными кавычками произойдет подстановка переменных оболочки, но не будет разделения слов. Это правильный выбор здесь.