Я динамически генерирую config.mk
со сценарием bash, который будет использоваться файлом Makefile. Файл создается с помощью:
cat > config.mk <<CFG
SOMEVAR := $value_from_bash1
ANOTHER := $value_from_bash2
CFG
Как мне убедиться, что сгенерированный файл действительно содержит содержимое $ value_from_bash *
, а не что-то расширенное / интерпретируемое? Мне, вероятно, нужно экранировать $
в $$
и \
в \\
, но есть ли другие символы, которые нужно экранировать? Может быть, есть специальное буквальное присвоение, о котором я не слышал?
Пробелы тоже вызывают проблемы:
$ ls -1
a b
a
$ cat Makefile
f := a b
default_target:
echo "$(firstword $(wildcard ${f}))"
$ make
a
Если я использую f: = a \ b
, он работает (используя кавычки вроде ] f: = 'a b'
тоже не сработало, make-файл просто рассматривает его как обычный символ)