如何在bash中执行"map"?

How to perform "map" in bash?

我想将一堆目录添加到命令行程序,其中每个目录都提供给命令行选项:

% cmd -I dir1 -I dir2 -I dir3 -I dir4 -I dir5

假设我可以将目录表示为通配符,有没有办法在单个命令中将它与“-I”交织在一起?例如,在 Ruby 我可以这样做:

system ["cmd", *Dir["dir*"].collect {|d| ["-I", d]}.flatten(1) ];

或者,在 Perl 中更简洁:

system "cmd", map {("-I", $_)} <dir*>;

对于不包含白色的目录名space,可以使用参数替换

dirs=(dir*)
cmd ${dirs[@]/#/-I }

/# 表示 "substitute at the beginning".

如果不需要-I后的space,可以使用大括号扩展(适用于包含whitespace的目录名):

cmd -I'dir'{1..5}

这也适用于使用等号的长选项:

cmd --capital-i=dir{1..5}

你可以使用

      for i in dir{1..4};do value=$value" -I $i"; done;cmd $value