Вы говорите
sed="sed 's/mon.tex/"$1$tex"/g'"
, которая создает переменную sed
, содержащую строку sed 's/mon.text/foo.tex/g'
, предполагая, что $1
равно foo
ради примера.
Затем вы расширяете $sed
без кавычек, и оно становится
sed ''\''s/mon.tex/foo.tex/g'\'''
Который включает в себя буквальный '
в начале вашего выражения, как если бы вы сказали:
sed -e \''s///'
РЕДАКТИРОВАТЬ: повторюсь, ваша проблема в том, что вы напрасно цитируете выражение sed
внутри присваивания переменной. Используйте
sed="sed s/mon.tex/$1$tex/g Makefile > Makefile"
И все будет работать как положено.