【问题标题】:How should I escape a comma inside the arguments to esyscmd?我应该如何在 esyscmd 的参数中转义逗号?
【发布时间】:2021-03-21 23:28:56
【问题描述】:

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

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

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

目前我得到:

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

...不管我如何尝试逃避,。用 不同的 字符替换 , 就可以了。例如。使用. 得到我:

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

【问题讨论】:

  • 使用 [ 和 ] 将整个参数引用到 esyscmd
  • @markasoftware 请提交以上内容作为答案,我会投票并接受。

标签: autoconf m4


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2018-10-26
    • 2010-10-11
    • 1970-01-01
    • 2015-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-10
    相关资源
    最近更新 更多