我有一个字符串数组,例如:
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"
,这不是我想要的。
我该怎么做才能让它发挥作用?谢谢!
答案 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