1 |
* Christof Schulze schrieb: |
2 |
|
3 |
> "for i in *.bla verursacht Bauchschmerzen" abzuschwächen, denn auch |
4 |
> diese Methode hat manchmal Vorteile. |
5 |
|
6 |
"for i in 'etwas unbekanntes'" hat nur dann Sinn, wenn man genau weiß, |
7 |
daß der Umfang des Gelieferten klein ist. Es hat mämlich einen |
8 |
schwerwiegenden Nachteil: Der Schleifenkopf wird nämlich erst |
9 |
_vollständig_ ausgewertet, bevor der erste Schleifendurchlauf überhaupt |
10 |
stattfindet: |
11 |
|
12 |
- Der Resourcenverbrauch ist ggf. enorm. |
13 |
- Je nach Datenmenge und System fliegt einem ARG_MAX um die Ohren. |
14 |
- Falls zwischen do .. done ein Fehler auftritt, dauert es ggf. eine |
15 |
halbe Ewigkeit, bevor darauf reagiert werden kann (interaktiv mit ^C |
16 |
oder im Script durch entsprechende Fehlerbehandlungsroutinen). |
17 |
|
18 |
Man kann das einfach nachvollziehen (FOOBAR existiert nicht): |
19 |
|
20 |
$> for i in `find /` ; do FOOBAR ; done |
21 |
|
22 |
Es wird erstmal alles unterhalb "/" durchsucht, bevor der Fehler |
23 |
("bash: FOOBAR: command not found") überhaupt auftritt. |
24 |
|
25 |
Dagegen werden bei einem "'etwas unbekanntes' | while read" die Daten |
26 |
schön häppchenweise und kontinuierlich durchgereicht. Schont die |
27 |
Resourcen, ARG_MAX spielt keine Rolle und die Fehlerbehandlung kann |
28 |
unmittelbar aktiv werden. |
29 |
|
30 |
$> find / | while read i ; do FOOBAR ; done |
31 |
|
32 |
Der Fehler tritt sofort auf. |
33 |
|
34 |
"for i in 'unknown'" ist einfach, hm, schlechter Stil. Gar nicht erst |
35 |
angewöhnen sowas. |
36 |
|
37 |
|
38 |
-kfk |
39 |
|
40 |
|
41 |
|
42 |
-- |
43 |
Object-oriented design is the roman numerals of computing. |
44 |
Rob Pike, 1991 |
45 |
-- |
46 |
gentoo-user-de@g.o mailing list |