如何在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
我想将一堆目录添加到命令行程序,其中每个目录都提供给命令行选项:
% 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