Каковы правила в GNU make относительно символов цитат? Я думал, что в большинстве случаев они просто будут частью текста в файле make и обычно не имеют особого значения. Следующий простой файл make демонстрирует, что символы двойной кавычки, появляющиеся вокруг аргумента в $ (if ...), удаляются, а не передаются из вызова $ (if). Это кажется неправильным, и странно, что незапрошенные кавычки проходят через более сложный файл make, который я использовал.
include gmsl
VAR1 ?= var1_value
VAR2 ?= var2_value1 var2_value2
failquote = $(if $(call ne,$(words $(1)),1),"$(1)",$(1))
passquote = $(if $(call ne,$(words $(1)),1),\"$(1)\",$(1))
TESTFAILQUOTE = $(call failquote,$(VAR2))
TESTPASSQUOTE = $(call passquote,$(VAR2))
quotetest :
@echo "--->Executing recipe for quotetest"
@echo VAR2 is $(VAR2)
@echo TESTFAILQUOTE = $(TESTFAILQUOTE)
@echo TESTPASSQUOTE = $(TESTPASSQUOTE)
Выхода таким образом:
bash-4.1$ make -f test_quote.mk quotetest
--->Executing recipe for quotetest
TESTFAILQUOTE = var2_value1 var2_value2
TESTPASSQUOTE = "var2_value1 var2_value2"
Примечания: вам потребуется сделать Gnu Стандартной библиотеки для этого сделать файл для работы, за $ (п вызова, ...). Найдите его здесь: http://gmsl.sourceforge.net/
В чем проблема? Является ли этот вывод некорректным? Правильно ли MadScientist, и проблема здесь - это только выходные пропущенные кавычки, потому что оболочка лишает их? –
Проблема в том, что мне нужны символы буквенной цитаты на выходе. MadScientist является и острым, и очень милостивым с его/ее помощью, и правильно - если кавычки должны сделать это с командой «эхо», они должны быть экранированы в значении переменной make. –
Нет, выход из них в значение переменной не является ответом. Ответ цитирует расширение переменной на строке оболочки, поэтому оболочка не разделяет их. –