Ist es möglich, "dann" durch Klammern zu ersetzen?


10

Ich habe zuerst gelernt, wie man in einer CSprache codiert und verwendet

if ( code )
then 
code
fi

macht es mir wirklich schwer, meinen Code zu lesen (frag nicht warum). Gibt es einen Ersatz für then?

Etwas wie das:

if ( code ) {
 code
}
fi

Die folgenden Antworten könnten helfen, aber wenn ich hinzufügen möchte, ist es eine sehr gute Idee, sich an die Syntax verschiedener Sprachen zu gewöhnen. Wenn Sie eine Anstellung in der Softwareentwicklung oder bei Entwicklern oder als Systemadministrator finden möchten, müssen Sie lernen, viele verschiedene Syntaxen zu erkennen und zu verwenden. Sie sind für jeden Arbeitgeber wertvoller, wenn Sie so flexibel wie möglich sind.
OldTimer

Antworten:


21

Es gibt keinen Ersatz, aber Sie können beide verwenden, wenn Sie die Zahnspange wirklich benötigen:

if true ; then {
    something
} fi

Dabei wird eine unnötige explizit geschweifte Befehlsgruppe als Hauptteil des thenBlocks verwendet. Alle Befehle in den geschweiften Klammern werden nur in der aktuellen Shell ausgeführt, wenn sie ausgeführt werden then, genau so, als ob die geschweiften Klammern nicht vorhanden wären.

Ich würde diesen Stil im Allgemeinen oder für Code, den jemand anderes lesen muss, nicht wirklich empfehlen, aber er gibt Ihnen die gewünschten Klammern, und er reicht aus, wenn Sie einen Editor verwenden, der Klammern oder Blöcke erfordert sowas in der Art.


Hier ist eine andere, die "nicht empfehlenswert" ist - Klammern in Hülle und Fülle: { if { [[ a == aa ]];};then { echo yes;};else { echo no;}; fi;}- Wenn Sie bashgenug verwenden, wird die Standardsyntax im Grunde genug vertraut, so dass es kein großes Problem ist.
Peter.O

15

Sie scheinen für das zu suchen C - Shell ( csh, tcsh, etc ...). Beachten Sie, dass Experten für die Programmierung dagegen raten .

Ich bin mir nicht sicher, ob der Teil, den Sie für unattraktiv halten, thenin der folgenden Zeile steht. In diesem Fall sollten Sie den folgenden Stil verwenden:

if condition; then
    stuff
fi

Ich muss zugeben, dass Rechtschreibanweisungen rückwärts wie fifür ifund esacfür case(aber nicht elihwfür while!) Etwas eigenartig sind. Aber das ist die Standard-Bourne-Shell, die portabelste Shell-Syntax, die Sie verwenden können.


Vielen Dank für Ihre Antwort. Ich finde das nicht thenunattraktiv. Mein Editor hebt nur die entsprechenden {}Paare hervor. Dies ist hilfreich, wenn ich einen Fehler habe, da ich dann alle meine ifAussagen leicht sehen und feststellen kann, ob etwas schief gelaufen ist .
25 的 人

1
Ah ja. Der Befehl dieses Plus vi, %der zur passenden Klammer / Klammer / Klammer springt. Ich sympathisiere. Ich vermisse viden %Befehl beim Programmieren in Python.
Celada

8
Haben Sie das Matchit Vim Plugin ausprobiert? Es unterstützt den% Sprung für if / fi in bash und viele andere Blöcke in vielen anderen Sprachen. Siehe hier - vim.org/scripts/script.php?script_id=39
amisax

@AmitKumar danke für den Tipp. Ich gucke mal!
Celada

9

Vielleicht schont das die Augen:

[ condition ] && {
   # statement 1
   # statment 2
   # ...
}

Ansonsten gewöhne dich einfach daran. Verwenden Sie die Redewendungen der Sprache.


1
Aber verlieren Sie den normalerweise unnötigen Bashismus und verwenden Sie nur einen Satz Klammern.
Josip Rodin

5

Das Folgende ist in der Nähe von dort. Und komisch.

: if; { code; } && {
    code
}

Ich persönlich mochte die ...

if true; then
more;fi

... bilde mich. Ich mag es, wenn die Kontrollwörter führen . Es kam mir immer seltsam vor, dass die vorherrschende ...;thenForm überhaupt zustande kam.

if    this && that
then  do these things too
else  i will probably get upset
fi

Es ist fast völlig entgegengesetzt zu Ihrer Anfrage, aber es ist eine andere Möglichkeit, dies zu tun. Sie können bei Bedarf auch beliebige Weiterleitungen an die fiZeile anheften, die für den gesamten Block gelten.


Diese vorherrschende Form scheint nur eine weitere Inkarnation des Gemeinsamen zu sein if(...) {, dh die öffnende Klammer bleibt in derselben Zeile wie ifin C-ähnlichen Sprachen.
Ruslan

@ Ruslan - Vielleicht - aber die Zeile macht in C überhaupt keinen Unterschied, oder?
Mikesserv

Richtig, aber der Zeilenumbruch macht auch keinen Unterschied in der Shell, oder? Die Semikolon-Nach-Bedingung lässt den Interpreter bereits nach einer Fortsetzung des ifBefehls suchen , auch wenn er sich in der nächsten Zeile befindet.
Ruslan

@ Ruslan - ja - ;in diesem Fall müssen Sie das Delim verwenden. Deshalb tun sie es.
Mikesserv

Wenn Sie die so :eingebaute Shell verwenden, damit eine Codezeile byteweise näher an der C-Syntax liegt, sollte dies in keiner Weise gefördert werden.
Josip Rodin

0

Hier ist ein Weg:

[ "$var" = "find" ] && echo "found"

ist äquivalent zu:

if [ "$var" = "find" ]; then
  echo "found"
fi

Wie er in der Frage feststellt, will er Klammern . Legen Sie etwas {...}um das echo "found", und dann gehen Sie in die richtige Richtung.
Peter.O

-2

Ich benutze immer:

if (code); then
   code;
fi

Wahrscheinlich nicht genau das, was Sie wollen, aber es ist ein bisschen mehr wie.


2
Dies führt zu einer Unterschale, die die Leistung verringert.
Will
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.