linux-l: For-Schleifen

Oliver Bandel oliver at first.in-berlin.de
Fr Feb 11 11:46:36 CET 2000


Hi!

On Thu, 10 Feb 2000, Jens Dreger wrote:

> On Thu, Feb 10, 2000 at 10:35:35PM +0000, Mario Thaten wrote:
> > Hallo,
> > 
> > mal ne ganz blöde Frage (man bash und man builtins hilft mir bloß
> > nicht genug weiter):
> 
> Hm. Man builtins bringt bei mir gar nicht. Sollte da was kommen ?!?
>  
> > Kann ich eine for-Schleife in der Bash so schreiben, daß sie, wie
> > aus Programmier- & Skriptsprachen bekannt, der Laufvariablen z.B.
> > Werte von 1-25000 zuweist, ohne
> > "for i in 1 2 3 4 5..25000"
> > schreiben zu müssen?
> 
> Das hast Du also bisher gemacht ? Wow ! ;-)
> 
> > Wenn nein, wie kann ich eine solche Funktionalität sonst erreichen?
>  
> Habe ich mich auch schon gefragt. Mein bisheriger fix:
> 
>      for I in `range 1 25000`; do echo $I; done
> 
> Okok, range is' natuerlich wieder so'n Perl-Skript:
> 
> ---8<--------------------------
> #!/usr/bin/perl -l
> 
> ($#ARGV == 1) || die "usage: range <from> <to>\n";
> 
> for($i=$ARGV[0]; $i<=$ARGV[1]; $i++) { print $i; }
> -----------------8<--------------------

Warum machst Du das so kompliziert?
Wenn Du eine for()-Schleife nutzt, dann ist es klar, daß
das doch etwas länger dauert, als seq braucht (das nicht jeder auf
dem Rechner hat.)

Es gibt doch in Perl einen Range-Operator.

Ersetze Deine Perl-Schleife durch:

@range = $ARGV[0]..$ARGV[1];
print "@range";

Ohne Geschwindigkeitsvergleiche gemacht zu haben, nehme ich an,
daß diese Variante, was den Perl-Teil betrifft, schneller ist,
als die for-Schleife, da es sich um einen perleigenen Operator
handelt.

Tschüß,
   Oliver




Mehr Informationen über die Mailingliste linux-l