2

Я запускаю Makefile который включает в себя следующую строку ...

find ./ -type f -regextype emacs -regex ".*tests$" | xargs rm -f

и получаю ошибку:

find ./ -type f -regextype emacs -regex ".*tests | xargs rm -f
/bin/sh: 1: Syntax error: Unterminated quoted string

Я сделал поиск Google для правильных способов сбежать; кажется, что ни один из синтаксисов escape, с которыми я сталкивался, не работает (то есть, используя одинарные кавычки, используя одну обратную косую черту, используя двойную обратную косую черту).

Я использую bash на LXDE (Ubuntu 14.04).

Какие-либо предложения?

1 ответ1

1

Эта проблема

Сравните строку в makefile:

find ./ -type f -regextype emacs -regex ".*tests$" | xargs rm -f

Со строкой в сообщении об ошибке:

find ./ -type f -regextype emacs -regex ".*tests | xargs rm -f

Похоже, что make проглотил $" .

Решение

Чтобы избежать этого, знак доллара должен быть экранирован. Пытаться:

find ./ -type f -regextype emacs -regex ".*tests$$" | xargs rm -f

Документация

Из GNU Make Manual Раздел 4.2:

Поскольку знаки доллара используются для начала создания ссылок на переменные, если вы действительно хотите, чтобы знак доллара в цели или предварительном условии вы указали два из них, $$ (см. Как использовать переменные). Если вы включили вторичное расширение (см. Вторичное расширение) и хотите, чтобы в списке предварительных условий был буквальный знак доллара, вы должны написать четыре знака доллара («$$$$»).

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .