Hi.
Ich finde das then bei if Anweisungen in der Bash überflüssig. Liegt da irgendein Sinn hinter, warum es in Bash so umständlich ist, wenn es in C usw so schön effizienter geht?
MfG
Anmeldungsdatum: Beiträge: 661 |
Hi. Ich finde das then bei if Anweisungen in der Bash überflüssig. Liegt da irgendein Sinn hinter, warum es in Bash so umständlich ist, wenn es in C usw so schön effizienter geht? MfG |
||||||
Moderator & Supporter
![]() Anmeldungsdatum: Beiträge: 21847 Wohnort: Lorchhausen im schönen Rheingau |
Der Sinn ist, dass der Parser erkennen muss, was zum if-Zweig gehört. In C erkennt er es an den geschweiften Klammern, in python an der Einrückung, in der Bash halt am Codewort |
||||||
Projektleitung
Anmeldungsdatum: Beiträge: 13205 |
Der Begriff "effizienter" ist hier unpassend. Es geht ja nur um ein paar Zeichen, die man weniger tippen muss. Für die Laufzeiteffizienz macht das keinen Unterschied. Wenn überhaupt, geht es um Produktivität des Entwicklers.
Nein, dafür braucht man es nicht. Ich denke, man wollte einfach die Lesbarkeit erhöhen. Sonst sähe das so aus:
Das lässt sich genau so eindeutig parsen. Möglicherweise war das mit den damaligen Tools einfacher zu machen ggf. hat es auch was damit zu tun, dass die Shell zeilenweise parst - oder es ging, wie gesagt, um die Lesbarkeit.
Nein, denn die sind optional:
Ciao robert |
||||||
Moderator & Supporter
![]() Anmeldungsdatum: Beiträge: 21847 Wohnort: Lorchhausen im schönen Rheingau |
Glaube ich eher dran, kann ich aber nicht beweisen 😉
Aber nur, wenn der if-Zweig nur eine Zeile hat, oder? |
||||||
![]() Anmeldungsdatum: Beiträge: 5072 Wohnort: Brandenburg an der Havel |
Ohne
Interessant ist so eine Syntax eher für einen Und es ist natürlich auch einfacher, nicht eine eigene Gruppe von zusammengesetzten Befehlen einführen zu müssen, die bei |
||||||
Anmeldungsdatum: Beiträge: 947 |
Ja, denn sonst kann der Parser/Compiler wieder nicht mehr vernünftig parsen, vgl.: void foo(){ int i = 0; int j = 0; if (i > 0) i++; j++; } vs. void foo(){ int i = 0; int j = 0; if (i > 0) i++; j++; } Wenn j++ zur Bedingung gehören soll, müssen Klammern gesetzt werden. Die beiden Beispiele sind für den Compiler beidesmal dasselbe. @UnixSamurai Wenn du if nicht magst, kann man das mit && umgehen if foo; then bar; fi liefert dasselbe wie foo && bar if foo; then bar; else bor; fi liefert dasselbe wie foo && bar || bor |
||||||
Projektleitung
Anmeldungsdatum: Beiträge: 13205 |
Guter Punkt! Mir war gar nicht bewusst, dass an der Stelle eine "List" erlaubt ist. Ist aber völlig logisch, denn mit "&&" und "||" verknüpfte Kommandos sind es ja auch. Und die Manpage sagt es ja auch: if list; then list; [ elif list; then list; ] ... [ else list; ] fi Also, das ist auf jeden Fall der Grund.
Das hätte man nicht gebraucht, denn diese Gruppierung gibt es ja schon: sie wird durch geschweifte Klammern gebildet. Wenn man unbedingt auf "if", "then" etc. verzichten will und das mit "&&" und "||" machen will, wie Du vorschlägst, braucht man das auch:
Ciao robert |
||||||
![]() Anmeldungsdatum: Beiträge: 5072 Wohnort: Brandenburg an der Havel |
Man könnte das |