TL; DR:
Попробуйте:
sed -i '$ s@$@ '"$1"'@' "$DIR./result/doc.md"
Длинная версия:
Давайте начнем с вашего исходного кода:
sed -i '$ s/$/ /replacement/' "$DIR./result/doc.md"
И давайте сравним его с кодом, на который вы ссылались:
sed -i '$ s/$/abc/' file.txt
Мы видим, что они не совсем совпадают. Я вижу, что вы правильно сделали эту замену:
file.txt --> "$DIR./result/doc.md"
Это выглядит хорошо (хотя у меня есть сомнения относительно. После $ DIR). Однако другая подстановка выглядит не очень хорошо:
abc --> /replacement
Вы фактически ввели другой разделитель /. Однако, если мы заменим разделители на '@', мы получим это:
sed -i '$ s@$@ /replacement@' "$DIR./result/doc.md"
Я думаю, что вышеприведенное совершенно верно в sed / bash. $@
не будет заменен оболочкой, поскольку он заключен в одинарные кавычки. Переменная $DIR
будет интерполироваться оболочкой, поскольку она заключена в двойные кавычки.
Рассмотрим одну из ваших попыток:
sed -i "$ s@$@ $1@" "$DIR./result/doc.md"
У вас возникнут проблемы из-за к интерполяции оболочки $ @ в двойных кавычках. Давайте исправим это, заменив одинарными кавычками (но оставив $ 1 без кавычек):
sed -i '$ s@$@ '"$1"'@' "$DIR./result/doc.md"
Обратите внимание на «$ 1». Мне пришлось окружить 1 доллар символом '', чтобы в основном убрать окружающие одинарные кавычки. Но затем я окружил $ 1 двойными кавычками, чтобы мы могли защитить строку от пробелов.