2016-08-01 15 views
0

Loop-Logik verwirrt mich immer, das ist wahrscheinlich eine einfache Lösung. Meine Stromschleife:Bash Loop Hilfe (Echo aa, bb, cc)

for i in a b; do for j in a b; do echo $i$j; done; done 

Diese Schleife druckt die folgende Ausgabe:

aa 
ab 
ba 
bb 

ich dafür nur Druck möchte:

aa 
bb 

Ich will es nur um die erste zusammenpassen zwei Buchstaben, dann die zweiten zwei Buchstaben und so weiter. Irgendwann möchte ich das über Dateien in zwei verschiedenen Verzeichnissen erweitern. Also möchte ich den ersten Dateinamen in dir1 und dann den ersten in dir2 ausgeben. Dann die 2. in dir1 und die 2. in dir2. Ich versuche nur, das zu vereinfachen und zuerst die Logik zu verstehen.

+0

Sind die Zeichenpaare im Allgemeinen immer gleich? Wenn dies der Fall ist, wäre eine einzige Schleife mit echo $ i $ i "" die offensichtliche Lösung. –

+0

Nun, ich möchte dies über Dateien in zwei verschiedenen Verzeichnissen erweitern. Also möchte ich den ersten Dateinamen in dir1 und dann den ersten in dir2 ausgeben. Dann die 2. in dir1 und die 2. in dir2. Ich versuche nur, das zu vereinfachen. – kkd92

+1

Sie sollten Ihre Frage bearbeiten, um die Details aus Ihrem Kommentar hinzuzufügen. –

Antwort

6

Ich würde mit Arrays vorschlagen, Ihr Problem zu lösen:

dir1_files=(dir1/*) 
dir2_files=(dir2/*) 

for ((i = 0; i < ${#dir1_files[@]}; ++i)); do 
    echo "${dir1_files[i]} ${dir2_files[i]}" 
done 

Dies setzt voraus, dass die Anzahl der Dateien in jedem Verzeichnis das gleiche ist.

+0

Danke, das ist am meisten entlang der Linien, die ich gesucht habe. Außerdem hilft mein sekundärer Ansatz, Dateinamen wiederzugeben. – kkd92

1

Nur überprüfen, dass sie gleich sind?

for i in a b; do 
    for j in a b; do 
    if [[ "$i" = "$j" ]]; then 
     echo $i$j 
    fi 
    done 
done 

Oder:

for i in a b; do for j in a b; do [[ "$i" = "$j" ]] && echo $i$j; done; done 
+0

Danke, das ist auch eine andere Lösung für meine erste Frage. – kkd92