从bash调用m4的参数数组

时间:2018-07-30 10:43:14

标签: 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

如何使它正常工作?

1 个答案:

答案 0 :(得分:2)

总是引用您的变量/数组扩展,除非您有理由不这样做(多数情况下永远不会如此)

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

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