如何在bash中执行“map”?

时间:2016-03-16 12:07:11

标签: bash map-function

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

% 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*>;

2 个答案:

答案 0 :(得分:4)

如果目录名不包含空格,则可以使用参数替换

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

/#表示“在开头替换”。

如果不需要-I之后的空格,可以使用大括号扩展(使用包含空格的dirnames):

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

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

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

答案 1 :(得分:0)

你可以使用

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