如何为n个元素动态生成以下命令? 我不想使用任何其他变量或数组。
command mycommand /path/location ${arg[1]}="${value[1]}" ${arg[2]}="${value[2]}" ...
答案 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