从bash调用m4的参数数组



我正在尝试动态计算参数来调用m4。但我无法使引号中的字符串正常工作。

我正试图用以下代码调用m4 -DFOO="foo oh oh" sample.m4

test.sh:

#!/bin/bash
args=(-DFOO="foo oh oh")
m4 ${args[@]} sample.m4

sample.m4:

foo is FOO
bar is BAR

当我手动运行m4命令时,它工作得很好。当我使用我的测试脚本时,我得到以下错误:

m4: cannot open `oh': No such file or directory
m4: cannot open `oh': No such file or directory
foo is foo
bar is BAR

很明显,它试图将字符串中的单词作为文件打开。如果我转义引号,我会得到以下错误:

m4: cannot open `oh': No such file or directory
m4: cannot open `oh"': No such file or directory
foo is "foo
bar is BAR

如何使其正常工作?

除非你有理由不引用你的变量/数组扩展名(大多数情况下都不是这样(

m4 "${args[@]}" sample.m4

未加引号的扩展导致数组中的字被拆分,最终导致m4命令的参数数量不相等。

相关内容

  • 没有找到相关文章

最新更新