Shell脚本动态生成Shell命令

时间:2019-01-12 13:26:03

标签: shell unix

如何为n个元素动态生成以下命令? 我不想使用任何其他变量或数组。

command mycommand /path/location ${arg[1]}="${value[1]}" ${arg[2]}="${value[2]}" ...

1 个答案:

答案 0 :(得分:1)

您可以使用带有for循环的子外壳,该循环遍历数组并创建正确的参数。

command mycommand /path/location $(for ((i=0; i<"${#value[@]}"; i++)) do printf "%s=%s " "${arg[$i]}" "${value[$i]}"; done)

就像我在评论中所承诺的那样,即使值中有空格,这也将起作用。

在这里,我动态创建参数并将参数分隔为空字符(\ 0)。

我将它们通过管道传递给xargs。 xargs是某种参数解析器,可能是这项工作的最佳选择。

因此,我们不是让bash传递参数(通过在空格上将其断开来传递参数),而是让xargs传递参数并完全控制它们的拆分方式。

在这种情况下,我选择对空字符进行分隔(通过设置-0),以使其他所有字符(空格,甚至换行符)都不会干扰参数的传递方式。

for ((i=0; i<"${#value[@]}"; i++)) do printf "%s=%s\0" "${arg[$i]}" "${value[$i]}"; done | 
xargs -0 command mycommand /path/location