Hmm ok, die Begriffe kopfgesteuert und fußgesteuert kenne ich zwar nicht, aber das klingt sehr nach einer einmaligen Evaluation am Anfang. Danke!
Der Linux Problem/Fragen-Thread
-
-
Nie Struktogramme gemalt?

-
Hab den Begriff mal in nem Lehrbuch gelesen, aber unser Softwaretechnik-Prof hat alles mit UML gemacht.
-
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:
Zitat von http://pubs.opengroup.org/onlinepubs/007904875/utilities/xcu_chap02.html#tag_02_09_04_03
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….html#tag_02_06 bzw den Link folgend hier: http://pubs.opengroup.org/onlinepubs/007….html#tag_02_13For-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.
-
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.
-
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. -
-
do-while ist wortwörtlich krebs
-
Gibt tatsächlich Situationen wo mans gebrauchen kann, sind aber selten.
-
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.
-
^ Hätte ich jetzt auch so vermutet.
-
Wie ist es eigentlich mit Linux und Mainboardtausch. Bin am Überlegen ob ich meinen Linuxrechner upgrade. Überlebt der sowas, oder ist es wie bei Windows, dass es mal klappen kann, aber dann doch zuviel quer geht?
-
Bei mir hat es bis jetzt immer geklappt, hatte da nie Probleme. Wo du eventuell nachkonfigurieren musst, wenn du einen Herstellertreiber für deine GraKa verwenden willst und du Onboard-Grafik genutzt hast und jetzt einen anderen Hersteller vom Grafikchip hast.
Also ich gehe jetzt davon aus, dass du den normalen Distributionskernel deiner Distri verwendest und dir nicht selbst was zusammengebaut hast, dann wäre es komplizierter. -
Wie ist es eigentlich mit Linux und Mainboardtausch. Bin am Überlegen ob ich meinen Linuxrechner upgrade. Überlebt der sowas, oder ist es wie bei Windows, dass es mal klappen kann, aber dann doch zuviel quer geht?Das verkraftet Linux sehr leicht, ist für dich also Problemlos zu machen.
-
Cool. Bisher habe ich keine eigenen Treiber verwendet. Ist nen altes Atom board. Überlege auf was jüngeres tu wechseln. Finde aber bei den aktuellen das preis-leistungsverhältnis zu den ersten core i celerons nicht gut. Muss mal schauen.
-
und dir nicht selbst was zusammengebaut hast, dann wäre es komplizierter.Das ist auch nicht wirklich kompliziert. Vor dem Hardware-Tausch macht man zusätzlich den Distro-Kernel im Bootloader startbar, sofern man den eh nicht als Alternative starten kann, was beim Selbstkompilieren des Kernels als Fallback i.d.R. sinnvoll ist. Nach dem Hardwaretausch startet man einmal mit dem Distro-Kernel und baut dann einen zur neuen Hardware passenden Kernel.
-
klingt ja auch schon nicht komplizert...

-
klingt ja auch schon nicht komplizert...
Mach dir mal keine Gedanken. Wenn du dich nicht aktiv um einen anderen Kernel gekümmert hast, hast du den Distrokernel. Board tauschen und weiter gehts.

Selbst ein Wechsel von Intel auf z.B. AMD sehe ich absolut unkritisch und habe ich auch schon durchgeführt (Atom 330 --> AMD C60).Worauf du allerdings achten solltest, ist, dass die Architektur die gleiche ist. Falls diese schon 64 bittig ist (amd64) ist, alles gut. Wenn nicht, weil du z.B. noch nen älteren 32 bittigen Atom hast, empfielt sich evtl. gleich eine Neuinstallation um den ggf. größeren RAM vollständig nutzen zu können.
-
klingt ja auch schon nicht komplizert...
Ach komm, kompliziert sieht unter Linux nun wirklich anders aus.

Nimm z.B. mal 'ne alte Kiste, in der PCI-, ISA-PnP- und legacy-ISA-Steckkarten versammelt sind …
… oder eine nicht ganz so alte Kiste mit AGP-Grafikkarte und IRQ-hungriger USB 2.0-PCI-Karte … -
Mach dir mal keine Gedanken. Wenn du dich nicht aktiv um einen anderen Kernel gekümmert hast, hast du den Distrokernel. Board tauschen und weiter gehts.

Selbst ein Wechsel von Intel auf z.B. AMD sehe ich absolut unkritisch und habe ich auch schon durchgeführt (Atom 330 --> AMD C60).Worauf du allerdings achten solltest, ist, dass die Architektur die gleiche ist. Falls diese schon 64 bittig ist (amd64) ist, alles gut. Wenn nicht, weil du z.B. noch nen älteren 32 bittigen Atom hast, empfielt sich evtl. gleich eine Neuinstallation um den ggf. größeren RAM vollständig nutzen zu können.
Mist. da hast du nen Punkt erwischt. Habe gerade nachgeschaut, ist nen x86 Xubuntu. Aber es läuft so schön...
Vielleicht sollte ich das in meine "ob" Bewertung einfließen lassen. -
Jetzt mitmachen!
Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!