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