Итерировать по массиву - PullRequest
       5

Итерировать по массиву

1 голос
/ 07 января 2011

В сценарии оболочки я пытаюсь перебрать массив, как в 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, но это кажется ужасно тяжелым для того, что я пытаюсь сделать.

Ответы [ 3 ]

2 голосов
/ 07 января 2011

В этом случае я бы сделал:

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

Обратите внимание, что каждый раз, когда вы ссылаетесь на переменные ($1, $PATH и особенно $@, вы хотите заключать их в кавычки "" - таким образом вы избегаете проблем, когда в значениях есть пробелы.

1 голос
/ 07 января 2011

Есть множество способов сделать это.Вот один из них, используя вот документ:

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
0 голосов
/ 07 января 2011

Размещение здесь текущего клуджа, который я использую для этого ..

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