Как избежать двойных долларов в 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.

Другие вопросы по тегам