Ist für ((…)) {…;} eine gültige Shell-Syntax? In welchen Muscheln?


Antworten:


30

{ ...; }wurde bereits in der ersten Version der Bourne-Shell in Unix V7 in den späten 70er Jahren anstelle von do ...; donein- forSchleifen akzeptiert (siehe Quellcode ), wurde jedoch meines Wissens nie dokumentiert.

Alles von ksh(sowohl das Original, das von der Bourne-Shell abgeleitet ist, als auch das Umschreiben von ksh93), pdksh¹ (und Derivate) bash(von Anfang 1989 an) und zshunterstützen es. Ich kenne kein ashDerivat, das das tut. yashtut es auch nicht, yashwurde aber nach dem POSIX-Standard geschrieben.

In zshwurde 1991 die Unterstützung mit 2.0 hinzugefügt, jedoch als Teil einer neuen Reihe von Kurzformen für die meisten Konstrukte, die über die Bourne-Syntax hinausgehen. Es ist nicht nur for i in 1 2; { ...; }, es ist for i in 1 2; any-command(und Varianten davon). Und es ist dokumentiert dort und hat sich seit seiner Einführung gewesen .

AFAIK zshdokumentiert es außerdem nur pdksh (für beide forund select).

Das ((init; condition; action))Formular stammt von ksh93und wurde von zshund kopiert bash.

Weder das ((...))noch das { ...; }anstelle von do ...; donePOSIX sind.

Siehe auch Wozu dient das Schlüsselwort "do" in Bash for loops? für mehr forSchleifenformen.


¹ weder frühere Versionen noch die Forsyth-Shell, auf der es basiert. Es wurde 1994 in 5.1.1 hinzugefügt und erklärt wahrscheinlich, warum es dort dokumentiert wurde


1
Wow, Mr. Bourne hat die Verwendung des c-Präprozessors in diesem 70er-Jahre-Quellcode voll und ganz begrüßt.
Digitales Trauma
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.