我应该如何在 esyscmd 的参数中转义逗号?

How should I escape a comma inside the arguments to esyscmd?

我有一个使用 esyscmd 生成列表的 M4 宏:

pushdef([FILES], esyscmd(echo \"\(\'`find test-photos -type f | paste -sd '\t' - | sed "s/\t/\',\'/g"`\'\)\"))dnl

抛开这可能是一个糟糕的想法并且作为滥用 autoconf 系统的有意识练习而进行的,我如何成功地转义 sed 正则表达式中的 , 字符,例如M4 不会将其解释为 esyscmd 调用中的参数分隔符?

目前我得到:

/usr/bin/m4:configure.ac:8: Warning: excess arguments to builtin `esyscmd' ignored

...无论我如何尝试逃避 ,。将 , 替换为 不同的 字符就可以了。例如。使用 . 让我:

('test-photos/foo'.'test-photos/bar')

按照autoconf的配置,M4引号字符为[]。引号内的逗号不会被解释为参数分隔符。因此,你应该简单地引用你传递给 esyscmd 的命令,用 [].

包围它

与您可能习惯的其他编程语言不同,引号不会使参数成为字符串或类似的东西 -- 引号只是一种将某些文本视为固定文本的方式,而不是解释宏或特殊该文本中的字符。

M4 manual确实是了解M4的唯一途径。