shell脚本的Zip函数

时间:2010-06-30 17:32:49

标签: python linux bash

我正在尝试编写一个shell脚本,将make几个目标分成几个不同的路径。我将传入一个以空格分隔的路径列表和一个以空格分隔的目标列表,并且脚本将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工具或者通过索引从空格分隔列表中检索元素的更简单方法?感谢。

3 个答案:

答案 0 :(得分:3)

使用数组:

#!/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

答案 1 :(得分:1)

这是解决方案

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

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

答案 2 :(得分:0)

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