我应该如何将参数中的逗号转义为esyscmd



我有一个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的唯一途径。

相关内容

  • 没有找到相关文章

最新更新