我有一个M4宏,它正在使用esyscmd
生成列表:
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
而不管我如何试图逃离CCD_ 5。用不同的字符替换,
效果很好。例如,使用.
让我:
('test-photos/foo'.'test-photos/bar')
根据autoconf中的配置,M4引号字符为[
和]
。引号中的逗号不会被解释为参数分隔符。因此,您应该简单地引用传递给esyscmd
的命令,用[
和]
包围它。
与你可能习惯的其他编程语言不同,引用不会使参数成为字符串或类似的东西——引用只是一种将某些文本视为固定文本的方式,而不是解释该文本中的宏或特殊字符。
M4手册实际上是了解M4的唯一途径。