bash:在数组的每个元素之前添加元素

时间:2014-03-16 19:35:24

标签: bash

我有一个字符串数组,例如:

ARR=(aa bb "cc dd")

我想调用带有以下参数的可执行文件:

my_executable -f aa -f bb -f "cc dd"

所以我需要为-f的每个元素添加前缀ARR。我做了一个搜索并找到:

${ARR[@]/#/-f }

然而,这会产生类似的东西:

-f aa -f bb -f cc dd

如果我使用my_executable ${ARR[@]/#/-f },它将向my_executable传递7而不是6个参数。如果我双引号字符串替换部分,它将生成3个参数,即"-f aa" "-f bb" "-f cc dd",这不是我想要的。

我该怎么做才能让它发挥作用?谢谢!

2 个答案:

答案 0 :(得分:4)

您可以创建一个插入了元素的新数组。将参数传递给程序,说:

"${NEWARR[@]}"

鉴于你的例子:

ARR=(aa bb "cc dd")
NEWARR=()
for i in "${ARR[@]}"; do
  NEWARR+=(-f)
  NEWARR+=("$i")
done
for i in "${NEWARR[@]}"; do
  echo "$i";
done

这会产生:

-f
aa
-f
bb
-f
cc dd

确保引用变量。

答案 1 :(得分:0)

如何将参数列表构建为用于运行my_executable的字符串?

for i in "${ARR[@]}"do
  arglist+="-f \"$i\" "
done

这将引用数组ARR中的所有元素,而不引用-f(如果重要)。

echo $arglist -f "aa" -f "bb" -f "cc dd"

然后你可以使用

  

my_executable $ arglist