首页 > 解决方案 > 将数组中的每个项目作为标志参数传递给 bash 中的命令

问题描述

我想知道如何将数组中的每个项目作为参数传递给命令中的标志。

例如,

myCommand -f foo1 -f foo2, ... -f fooN

我想定义一个数组,这样

FOOS=("foo1" "foo2" ... "fooN")

并遍历数组以-f在示例中用作标志。

就我而言,我想将目录中的每个文件传递给某个命令,每个命令都使用-f命令。有任何想法吗?

标签: bash

解决方案


最强大的解决方案是手动构建第二个列表:

args=()
for foo in "${FOOS[@]}"; do args+=(-f "$foo"); done

myCommand "${args[@]}"

没有真正简单的方法可以做到这一点。"-f "您可以在每个项目之前使用字符串替换。它会一直工作,直到其中一个参数有空格或 glob,然后它不会。

myCommand ${FOOS[@]/#/-f }

(注意周围没有引用${FOOS...}。)


推荐阅读