用于shell脚本的Zip函数

我试图编写一个shell脚本,将几个不同的目标path。 我将传递一个由空格分隔的path列表和一个以空格分隔的目标列表,该脚本将为每对path和目标make DESTDIR=$path $target 。 在Python中,我的脚本看起来像这样:

 for path, target in zip(paths, targets): exec_shell_command('make DESTDIR=' + path + ' ' + target) 

不过,这是我目前的shell脚本:

 #! /bin/bash packages=$1 targets=$2 target= set_target_number () { number=$1 counter=0 for temp_target in $targets; do if [[ $counter -eq $number ]]; then target=$temp_target fi counter=`expr $counter + 1` done } package_num=0 for package in $packages; do package_fs="debian/tmp/$package" set_target_number $package_num echo "mkdir -p $package_fs" echo "make DESTDIR=$package_fs $target" package_num=`expr $package_num + 1` done 

有一个相当于Python的zip函数的Unix工具,或者是一个更简单的方法,通过它的索引从空格分隔的列表中检索一个元素? 谢谢。

使用数组:

 #!/bin/bash packages=($1) targets=($2) if (("${#packages[@]}" != "${#targets[@]}")) then echo 'Number of packages and number of targets differ' >&2 exit 1 fi for index in "${!packages[@]}" do package="${packages[$index]}" target="${targets[$index]}" package_fs="debian/tmp/$package" mkdir -p "$package_fs" make "DESTDIR=$package_fs" "$target" done 

在bash中没有办法做到这一点。 您将需要从输入创建两个数组,然后使用每个数值迭代计数器。

这是解决方案

 paste -d ' ' paths targets | sed 's/^/make DESTDIR=/' | sh 

paste在shell中相当于zipsed用于预先make命令(使用正则表达式),结果传递给sh执行