Neue Antwort schreiben 
 
Themabewertung:
  • 0 Bewertung(en) - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Der Linux Problem/Fragen-Thread
Chrisse Offline
Generischer Benutzertitel

Beiträge: 2.936
Registriert seit: Jul 2008
Beitrag #1541
RE: Der Linux Problem/Fragen-Thread
Hmm ok, die Begriffe kopfgesteuert und fußgesteuert kenne ich zwar nicht, aber das klingt sehr nach einer einmaligen Evaluation am Anfang. Danke!

„Zitate von sich selbst in der Signatur sind doof.“ Chrisse, 2009
„Hmm... mal was aus 2010 reinnehmen“ Chrisse, 2010
„Ach, wie die Zeit vergeht...“ Chrisse, 2011
„Bin immernoch dagegen“ Chrisse, 2012
„Jetzt auch mit 2013“ Chrisse, 2013
„2021 ich komme“ Chrisse, 2014
„Ab jetzt wieder länger“ Chrisse, 2015
„Gut Ding will Weile haben“ Chrisse, 2016
„Meine Signatur: Öfter geupdated als mein Windows“ Chrisse, 2017
„Klicken sie weiter, hier gibt es nichts zu lesen“ Chrisse, 2018
„Dieser Post kann Spuren von Sarkasmus enthalten“ Chrisse, 2019
„Reinstate Chiaki“ Chrisse, 2020
„2021 ist eine Coverstory der Moderation und nie passiert!“, Chrisse, 2022
21.12.2016 20:15
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
mrshadowtux
Unregistered

 
Beitrag #1542
RE: Der Linux Problem/Fragen-Thread
Nie Struktogramme gemalt? :D
[Bild: kopfgesteurte_schleife.png][Bild: fussgesteuerte_schleife.png]
21.12.2016 20:25
Diese Nachricht in einer Antwort zitieren
Chrisse Offline
Generischer Benutzertitel

Beiträge: 2.936
Registriert seit: Jul 2008
Beitrag #1543
RE: Der Linux Problem/Fragen-Thread
Hab den Begriff mal in nem Lehrbuch gelesen, aber unser Softwaretechnik-Prof hat alles mit UML gemacht.

„Zitate von sich selbst in der Signatur sind doof.“ Chrisse, 2009
„Hmm... mal was aus 2010 reinnehmen“ Chrisse, 2010
„Ach, wie die Zeit vergeht...“ Chrisse, 2011
„Bin immernoch dagegen“ Chrisse, 2012
„Jetzt auch mit 2013“ Chrisse, 2013
„2021 ich komme“ Chrisse, 2014
„Ab jetzt wieder länger“ Chrisse, 2015
„Gut Ding will Weile haben“ Chrisse, 2016
„Meine Signatur: Öfter geupdated als mein Windows“ Chrisse, 2017
„Klicken sie weiter, hier gibt es nichts zu lesen“ Chrisse, 2018
„Dieser Post kann Spuren von Sarkasmus enthalten“ Chrisse, 2019
„Reinstate Chiaki“ Chrisse, 2020
„2021 ist eine Coverstory der Moderation und nie passiert!“, Chrisse, 2022
21.12.2016 21:25
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
gandro Offline
Quälgeist

Beiträge: 8.950
Registriert seit: Jul 2008
Beitrag #1544
RE: Der Linux Problem/Fragen-Thread
Mir ist nicht ganz klar, was es hier für eine Rolle spielen soll, ob die Bedingung am Anfang oder am Ende des Loops ausgeführt wird (wie soll eine fussgesteuerte "for i in x" Schleife überhaupt funktionieren, was ist i in ersten Durchlauf?). Das hier ist viel mehr eine Frage der Ausführungsregeln. Und bei einem For-Loop in der Shell wird das iterierte Set vor dem ersten Durchlauf vollständig evaluiert.

Um die Frage zu beantworten ob das nur in bash so funktioniert, oder generell: Der POSIX-Standard definiert die For-Schleife wiefolgt:
http://pubs.opengroup.org/onlinepubs/007...2_09_04_03 schrieb:First, the list of words following in shall be expanded to generate a list of items.
Then, the variable name shall be set to each item, in turn, and the compound-list executed each time.

Was genau Word-Expression sein können (also der Teil nach dem in, in dem Falle hier die Pathname-Extension *.c), steht hier:
http://pubs.opengroup.org/onlinepubs/007...#tag_02_06 bzw den Link folgend hier: http://pubs.opengroup.org/onlinepubs/007...#tag_02_13

For-Loop Items können nicht (wie z.B. bei Python, for line in open('words.txt')) lazy generiert werden. Selbst bei sowas wie IFS=$'\n'; for line in $(cat words.txt); do echo $line ; done wartet die Shell bis der Befehl fertig ist und die Datei eingelesen, bevor die Ausgabe beginnt. Das ist anders als z.B. das while-Statement in Shell, wo cat words.txt | while read w ; do echo $w ; done direkt nach der ersten Zeile anfängt zu iterieren - beide Schleifen hier sind kopfgesteuert.

Zum selber testen, einfach das cat zu einem tail -f umwandeln.

TLDR: Ja, Shell garantiert dir, dass bei einem for Loop die Word List nur einmal initial evaluiert wird, und danach über jedes Item separat iteriert.
(Dieser Beitrag wurde zuletzt bearbeitet: 22.12.2016 00:31 von gandro.)
22.12.2016 00:30
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
mrshadowtux
Unregistered

 
Beitrag #1545
RE: Der Linux Problem/Fragen-Thread
Zitat:wie soll eine fussgesteuerte "for i in x" Schleife überhaupt funktionieren, was ist i in ersten Durchlauf?
For-Schleifen sind IMMER kopfgesteuert, die Bedingung wird also vor dem ersten Durchlauf gecheckt. Anders sieht es bei fußgesteuerten Do-Loop-Schleifen aus, wo erst einmal durchgeführt und DANN erst die Bedingung gecheckt wird.
22.12.2016 00:34
Diese Nachricht in einer Antwort zitieren
gandro Offline
Quälgeist

Beiträge: 8.950
Registriert seit: Jul 2008
Beitrag #1546
RE: Der Linux Problem/Fragen-Thread
(22.12.2016 00:34)mrshadowtux schrieb:  
Zitat:wie soll eine fussgesteuerte "for i in x" Schleife überhaupt funktionieren, was ist i in ersten Durchlauf?
For-Schleifen sind IMMER kopfgesteuert, die Bedingung wird also vor dem ersten Durchlauf gecheckt. Anders sieht es bei fußgesteuerten Do-Loop-Schleifen aus, wo erst einmal durchgeführt und DANN erst die Bedingung gecheckt wird.
Ich habe nichts anderes behauptet. Nur ist ob kopf- oder fussgesteuert halt irrelevant, der Unterschied hier ist ob es for- oder while-Schleifen sind. Bei "for" wird die Expression nur einmal komplett evaluiert, bei "while" bei jedem Durchlauf. Beide sind kopfgesteuert.
(Dieser Beitrag wurde zuletzt bearbeitet: 22.12.2016 00:44 von gandro.)
22.12.2016 00:41
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
mrshadowtux
Unregistered

 
Beitrag #1547
RE: Der Linux Problem/Fragen-Thread
Gibt auch do-while, ist dann fußgesteuert. :P

Folgendes würde also problemlos einmal durchlaufen:
PHP-Code:
<?php
    $x
=23;
    do
    {
        
irgendwas();
        
nochwas();
    } while(
$x==24)
?>
22.12.2016 01:07
Diese Nachricht in einer Antwort zitieren
Der Doktor Offline
%0|%0

Beiträge: 7.869
Registriert seit: Dec 2008
Beitrag #1548
RE: Der Linux Problem/Fragen-Thread
do-while ist wortwörtlich krebs

Es ist besser nicht zu moderieren als falsch zu moderieren
22.12.2016 01:09
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
mrshadowtux
Unregistered

 
Beitrag #1549
RE: Der Linux Problem/Fragen-Thread
Gibt tatsächlich Situationen wo mans gebrauchen kann, sind aber selten.
22.12.2016 01:09
Diese Nachricht in einer Antwort zitieren
s4ndwichMakeR Offline
Realitätsfeinmotoriker‮

Beiträge: 5.195
Registriert seit: Jul 2008
Beitrag #1550
RE: Der Linux Problem/Fragen-Thread
Hat das mit der for-Schleife nicht eher Expansions- und Evaluations-Reihenfolge-Gründe? Die Bash expandiert doch zunächst *.c zu foo.c und eröffnet folglich die Schleife for fname in foo.c, weil zum Zeitpunkt der Expansion lediglich foo.c existierte. Eine erneute Expansion findet nicht statt.

• • • – • – – • – –
22.12.2016 21:04
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
Neue Antwort schreiben 


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 5 Gast/Gäste