代码之家  ›  专栏  ›  技术社区  ›  Evan Kroske

shell脚本的Zip函数

  •  3
  • Evan Kroske  · 技术社区  · 14 年前

    我想写一个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 回复  |  直到 14 年前
        1
  •  4
  •   Philipp    14 年前

    使用数组:

    #!/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
    
        2
  •  3
  •   Taha Jahangir    10 年前

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

    paste 相当于 zip sed 用于预处理make命令(使用regex)并将结果传递给 sh 执行

        3
  •  0
  •   Daenyth    14 年前

    在bash里没办法这么做。您需要从输入创建两个数组,然后使用每个数组的值遍历计数器。