Я хочу добавить void mainfunction() в верхней части файла. Я читаю фактическое имя файла из другого файла и имя основной функции из другого файла. Я использовал:

sed -i 1i void $name_main() $name_c 

где имя файла хранится в name_c а name_main хранит имя основной функции. Но эта команда void $main_name() в начало файла. Как я могу это сделать?

1 ответ1

1

Вам нужно использовать двойные кавычки, например:

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

Без кавычек оболочка выполнит разбиение по словам. Это может вызвать все проблемы. Кроме того, без кавычек оболочка ожидает, что скобки будут запускать подоболочку. Вы тоже этого не хотите.

С двойными кавычками произойдет подстановка переменных оболочки, но не будет разделения слов. Это правильный выбор здесь.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .