在 bash shell 脚本/makefile 中的正则表达式中转义“$”的正确语法?

在 bash shell 脚本/makefile 中的正则表达式中转义“$”的正确语法?

我正在运行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

文档

来自GNU Make 手册第 4.2 节

因为美元符号用于开始进行变量引用,所以如果您确实想要在目标或先决条件中使用美元符号,则必须写两个美元符号“$$”(请参阅​​如何使用变量)。如果您启用了二次扩展(请参阅二次扩展)并且想要在先决条件列表中使用文字美元符号,则实际上必须写四个美元符号(“$$$$”)。

相关内容