Ksh-Funktionen in Zsh integriert?

Ksh-Funktionen in Zsh integriert?

Ich bin seit einiger Zeit Bash-Benutzer. Ich möchte jetzt mindestens eine andere Shell lernen, also habe ich mir die Korn-Shell zugelegt. Es sieht jedoch nicht so aus, als ob Ksh seit fast zwanzig Jahren größere Updates erhalten hätte, und ich habe gelesen, dass Zsh Funktionen davon enthält. Ich habe viele der Shell-Vergleichsfragen im StackExchange-Netzwerk gelesen, aber keine Antwort darauf gefunden:Gibt es Funktionen von Korn Shell, die in Zsh nicht enthalten sind?Wenn ja, welche sind das?

Antwort1

Hier ist dieWikipedia-Artikel zum Befehlsshell-Vergleich.

Demnach ist die einzige Funktion, die ksh hat, die zsh nicht hat,Benannte Parameterfür benutzerdefinierte „Typen“. Es kann noch weitere geben, da dieser Artikel keine vollständige Liste darstellt, insbesondere bei weniger bekannten Funktionen.

Umgekehrt könnte die Antwort auf Ihre Frage ein Buch füllen (möglicherweiseDieses hier).

Zsh hat viele Funktionen, die ksh nicht hat. Einige beliebte sindBefehlsstapel,Verzeichnisstapel,Verlauf teilenUndEingabeaufforderung.

  • Befehlsstapelist, wenn Sie einen Befehl eingeben und feststellen, dass Sie zuerst einen anderen Befehl ausführen sollten. Senden Sie einfach die aktuelle Zeile an den Befehlsstapel, führen Sie den anderen Befehl aus und entfernen Sie den Befehl dann vom Stapel. Sie können dies mehrmals tun. (zsh ist die einzige Shell, die ich kenne, die dies bietet).
  • Verzeichnisstapel(auch bekannt als pushd/ popd) ist der Fall, wenn Sie nacheinander in Verzeichnisse wechseln und dann in umgekehrter Reihenfolge zurück wechseln möchten. (Viele Shells ermöglichen dies, einschließlich Bash).
  • Verlauf teilenist dort, wo jede geöffnete Shell einen einzigen gemeinsamen Verlauf hat. Führen Sie einen Befehl in einem Fenster aus, wechseln Sie zu einem anderen und er wird in Ihrem Verlauf verfügbar sein.
  • Eingabeaufforderungist genau wie Ihre Eingabeaufforderung, außer dass es rechtsbündig ist. Viele Leute setzen das cwdoder gerne datein das rprompt.

Hier sind einige Diskussionen auf Stack Exchange-Sites zu zsh:

Antwort2

ksh88, die bekannteste Variante, da sie in SVR4 enthalten war, bashauf der die Sprache größtenteils basiert, die teilweise ein Klon von pdksh ist und deren Teilmenge die Grundlage für die POSIX-Spezifikation ist, shhat sich seit der letzten Veröffentlichung im Mai 1993 (ksh88i) nicht wesentlich weiterentwickelt (abgesehen von einigen Fehlerbehebungen und POSIX-Anpassungen durch einige Anbieter).

Allerdings wurde ksh93, eine Neufassung von David Korn, erstmals im Dezember 1993 veröffentlicht, bis etwa 2014 aktiv weiterentwickelt und sein Quellcode wurdebefreitim Jahr 2000. Die letzte offizielle Version, ksh93u+, wurde im August 2012 veröffentlicht (nur wenige Wochen, nachdem Sie diese Frage gestellt hatten), und es gab 2014 eine „Beta“-Version (ksh93v-) mit vielen neuen Funktionen, die von den ursprünglichen Autoren erstellt wurde, nachdem sie von AT&T entlassen worden waren.

Es gab eine Gemeinschaftsanstrengung, die Entwicklung fortzusetzen und den Code zu modernisieren, basierend auf ksh93v-, was zu einem ksh2020 führte, aberdieser Versuch wurde nun aufgegeben. Aseparater Aufwand zur Aufrechterhaltung von ksh93u+danach scheint es genauso zu laufen. Während einneues (ksh93u+m)sieht im Moment etwas vielversprechender aus.

ksh93 ist/war mehr als eine Shell. Es wurde zusammen mit einer Reihe von Dienstprogrammen entwickelt, die einen Teil des gleichen Codes wiederverwendeten und in ksh93 integriert werden konnten, ähnlich wie Busybox.

Beachten Sie, dass es eher einForschungAufwand, wird oft als experimentell angesehen und ist sehr unzureichend dokumentiert.

Obwohl zshksh93 in erster Linie als leistungsstarke interaktive Shell entwickelt wurde, lag der Fokus eher auf der Programmiersprache. Es wurde viel Arbeit in die Sprache und ihre Optimierung gesteckt, mit dem Ziel, in eine ähnliche Kategorie wie perloder pythonbeispielsweise einzusteigen.

Es gibt viele Funktionen von ksh93, die zsh nicht hat, so wie es viele Funktionen von zsh gibt, die ksh93 nicht hat, und beide haben Funktionen voneinander übernommen. Es gibt eine große Anzahl gemeinsamer Funktionen und es gibt Dinge, die beide tun können, aber auf sehr unterschiedliche Weise.

Zu den Dingen, die ksh93 hat, zsh aber nicht:

  • alle Builtins von ast-open: ksh93wenn es als Teil von ast-open gebaut wird, hat es viele Builtins, die zsh nicht hat, einschließlich verbesserter Versionen einiger Standard-Utilities wie date, join, head, , tr, uniq, wc... (obwohl zsh einige der Funktionen dieser in seinen eigenen Builtins oder Sprachfeatures hat). Das ist dieOptimierungSeite der Dinge. Sie können nicht perl-like sein, wenn Sie einen Prozess verzweigen müssen, um etwas zu tun.
  • nicht-forkende Befehlsersetzungen ( $(...)) und Befehlsersetzungen, die keine Subshell-Umgebung erstellen ${ ...; }.
  • mehrdimensionale Arrays:a=((a b) (c d))
  • Funktionen der objektorientierten Programmierung (Typen, Strukturen, Disziplinen, Methoden …).
  • statischer Bereich für Variablen und Optionen ( zshhat privatefür Variablen, aber keinen statischen Bereich für Optionen).
  • Namensreferenzen (wichtig für eine Shell mit statischem Gültigkeitsbereich und Objektprogrammierstrukturen, nicht so sehr für Shells mit dynamischem Gültigkeitsbereich wie zsh oder bash)
  • Datums-/Zeitmanipulation einschließlich mit natürlicher Sprache, Crontab, ISO-Formaten in seinen printfund dateintegrierten Funktionen ( zsh's strftimeist im Vergleich dazu sehr eingeschränkt).
  • einige nützliche Umleitungsoperatoren ( <#((...))zum Suchen, <>;Überschreiben und Abschneiden ...).
  • Namensräume
  • Jobpools und Coshells.
  • CSV/URI/HTML-Entitäten/Base64-Kodierung/Dekodierung.
  • JSON-Kodierung/Dekodierung in ksh93v – um seine erweiterten Datenstrukturen in einem Format zu (de-)serialisieren, das andere Tools verstehen können (sehr fehlerhaft, in ksh2020 entfernt).
  • $"..."zur Nachrichtenlokalisierung
  • /dev/tcp, /dev/udp( zshhat ztcp, zsocketfür UNIX-Domänen-Sockets, aber kein UDP)
  • In den 90er Jahren gab es in CDE auch eine dtkshShell, die KSH93 um X-Toolkit-Funktionalität ergänzte.
  • es gibt ein shcompzukompilierenKSH-Code.

verwandte Informationen