2011-01-07 10 views
1

In einem Shell-Skript Ich bin auf der Suche über einen Array iterieren, wie ich würde in Python, indem Sie:Iterate über Array

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

Aber kann nicht der beste Weg herauszufinden, es zu tun? Ich bin versucht, das Shell-Skript in Python neu zu schreiben, aber das scheint schrecklich schwer für das, was ich versuche zu tun.

Antwort

2

In diesem Fall würde ich tun:

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

Beachten Sie, dass jedes Mal, wenn Sie Variablen Referenz ($1, $PATH und insbesondere [email protected], möchten Sie sie mit "" Anführungszeichen umgeben - so vermeiden Sie Probleme, wenn Leerzeichen in den Werten vorhanden sind

+1

Danke, und mir ist gerade klar geworden, was für eine schreckliche Idee es ist, eine Variable namens PATH zu haben. – richo

+0

@Richo: ja, sehr guter Punkt :-) – psmears

+0

@Richo: Deshalb empfehle ich die Vermeidung von Großbuchstaben-Variablennamen - um Namenskollisionen zu vermeiden. –

0

Posting hier die aktuelle kludge ich es tun bin mit ..

#!/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 
    [email protected] 
    RAWP=${#RAWP} 
    if [ $RAWP -gt 0 ]; then 
     pull_or_clone [email protected] 
    fi 
} 


pull_or_clone path repo pairs go here 
+0

Sie können 'Pfad = $ 1 Repo = $ 2; Verschiebung 2'. –

1

Es gibt mehrere Möglichkeiten, dies zu tun. Hier ist eine mit einem hier doc:

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