如何编写程序为另一个程序生成正确引用的命令行参数?

时间:2013-11-20 15:29:28

标签: bash quotes

我需要编写一个程序,其输出是另一个程序的命令行的一部分。 e.g。

% helper
--arg1='foo bar' --arg2='another string'

然后用作

% program `helper`

% program args `helper` more-args

这很简单,没有引号,但我找不到任何可行的引用。

我可以这样工作:

% echo `helper` | xargs program

但我不想对我的客户造成这种情况。

是否有任何'helper'可以输出,以便以比使用xargs更简单的方式调用'program'?

1 个答案:

答案 0 :(得分:0)

这样的事情可能有用。

# Make helper output an array assignment
% helper
options=( --arg1='foo bar' --arg2='another string' )

# Use eval to actually define the array using the output of helper
% eval "$(helper)"
% echo "${options[0]}"
--arg1='foo bar'

# Call program using options instead of helper directly
% program "${options[@]}"

Quoting是shell语法的一部分,您不能在参数中嵌入shell语法。你也可以试试

% eval "program $(helper)"

虽然我建议不要更广泛地使用eval。与eval的任何使用一样,您需要注意helper输出,以便不会运行任何非预期的代码。