Как избежать двойных долларов в make-файле?
Рассмотрим каталог, содержащий (только) 3 файла, полученные с помощью:
echo "foobar" > test1.txt
echo "\$foobar" > test2.txt
echo "\$\$foobar" > test3.txt
(и, таким образом, содержащий соответственно foobar
, $foobar
, $$foobar
).
grep
инструкция:
grep -l -r --include "*.txt" "\\$\\$" .
фильтрует файлы (фактически уникальный файл), содержащие двойные доллары:
$ grep -l -r --include "*.txt" "\\$\\$" .
./test3.txt
Все идет нормально. Теперь эта инструкция не выполняется в make-файле, например:
doubledollars:
echo "Here are files containing double dollars:";\
grep -l -r --include "*.txt" "\\$\\$" . ;\
printf "\n";\
приводит к ошибкам:
$ make doubledollars
echo "Here are files containing double dollars:";\
grep -l -r --include "*.txt" "\\\ . ;\
printf "\n";\
/bin/sh: -c: ligne 2: unexpected EOF while looking for matching `"'
/bin/sh: -c: ligne 3: syntax error: unexpected end of file
makefile:2: recipe for target 'doubledollars' failed
make: *** [doubledollars] Error 1
Отсюда мой вопрос: как избежать двойных долларов в make-файле?
Изменить: обратите внимание, что этот вопрос не касается Perl.
1 ответ
Решение
Со следующим Makefile
a:
echo '$$$$'
make a
дает
$$
... и лучше использовать одинарные кавычки, если вам не нужно расширение переменной:
grep -l -r -F --include *.txt '$$' .
если вы не пишете сценарий для возможности выполнения в Windows в среде MinGW.