我正在运行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 搜索了正确的转义方法;我遇到的所有转义语法似乎都不起作用(即使用单引号、使用单个反斜杠、使用双反斜杠)。
正在 LXDE(Ubuntu 14.04)上运行 bash。
有什么建议么?
答案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
文档
因为美元符号用于开始进行变量引用,所以如果您确实想要在目标或先决条件中使用美元符号,则必须写两个美元符号“$$”(请参阅如何使用变量)。如果您启用了二次扩展(请参阅二次扩展)并且想要在先决条件列表中使用文字美元符号,则实际上必须写四个美元符号(“$$$$”)。