2012-04-04 19 views
2

Dieser Code ...Bash für - variable Zustands

#!/bin/bash 

cond=10; 

for i in {1..$cond} 
do 
    echo hello; 
done 

... nur macht mich verrückt. Dies druckt nur ein "Hallo", wie in i gibt es {1..10}.

#!/bin/bash 

cond=10; 

for i in {1..10} 
do 
    echo hello; 
done 

druckt 10x Hallo, was gewünscht wird. Wie setze ich die Variable in den Zustand? Ich habe verschiedene Ansätze ausprobiert, keiner von ihnen hat funktioniert. Was für eine leichte Aufgabe aber .. Vielen Dank im Voraus.

+1

Die Klammererweiterung funktioniert nicht mit Variablen. Sie können stattdessen etwas wie $ (seq $ cond) verwenden. – nosid

+0

Schöne Lösung, die Jonathan's ist universeller, aber dieser Gedanke kam mir nicht in den Sinn. thx – tsusanka

Antwort

6

Dies funktioniert:

#!/bin/bash 

cond=10 

for i in $(eval "echo {1..$cond}") 
do 
    echo hello 
done 

Aber natürlich schwerer zu lesen ist:

cond=10; 

for ((i=0;i<=$cond;i++)); 
do 
    echo hello; 
done 
+0

Was für ein dummer Mann ich bin. Ich habe viele verschiedene Wege gesehen, '' '' zu schreiben, aber irgendwie habe ich die wichtigste verpasst. Vielen Dank. – tsusanka

+0

(nur eine Anmerkung, ich begann die 'for' auf 1, nicht 0 - um niemanden zu verwirren) – tsusanka

+1

Um nur hinzuzufügen, innerhalb der' for' Bedingung, ist es nicht notwendig, '$ cond' zu sagen. "Cond" an sich funktioniert auch gut. – FatalError

2

Neben der klassischen Schleife bereits beantwortet, Sie etwas Magie benutzen.