迭代数组

时间:2011-01-07 09:31:35

标签: bash loops iteration

在shell脚本中,我想通过执行迭代遍历数组,就像我在python中一样:

for i, j in (("i value", "j value"), ("Another I value", "another j value")):
    # Do stuff with i and j
    print i, j

但无法找到最佳方法吗?我很想在python中重写shell脚本,但对于我正在尝试做的事情来说,这似乎非常重。

3 个答案:

答案 0 :(得分:2)

在这种情况下,我会这样做:

while [ $# -ge 2 ]; do
    PATH="$1"; shift
    REPO="$1"; shift
    # ... Do stuff with $PATH and $REPO here
done

请注意,每次引用变量($1$PATH,尤其是$@时,您希望用""引号括起它们 - 这样可以避免出现问题值中有空格。

答案 1 :(得分:1)

有很多方法可以做到这一点。这是一个使用这里的文档:

foo () {
    while IFS=$1 read i j
    do
        echo "i is $i"
        echo "j is $j"
    done
}

foo '|' <<EOF
i value|j value
Another I value|another j value
EOF

答案 2 :(得分:0)

在这里发布我正在使用的当前kludge ..

#!/bin/bash

function pull_or_clone {
    PATH=$1
    shift
    REPO=$1
    shift

    echo Path is $PATH
    echo Repo is $REPO

    # Do stuff with $PATH and $REPO here..


    #Nasty bashism right here.. Can't seem to make it work with spaces int he string
    RAWP=$@
    RAWP=${#RAWP}
    if [ $RAWP -gt 0 ]; then
        pull_or_clone $@
    fi
}


pull_or_clone path repo pairs go here