我应该如何在 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的唯一途径。
我有一个使用 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的唯一途径。