Возможности Ksh включены в Zsh?

Возможности Ksh включены в Zsh?

Я уже некоторое время являюсь пользователем Bash. Теперь я хочу изучить хотя бы еще одну оболочку, поэтому я выбрал Korn Shell. Однако, похоже, что Ksh не обновлялся в течение почти двадцати лет, и я читал, что Zsh включает в себя функции из него. Я прочитал много вопросов о сравнении оболочек в сети StackExchange, но не нашел ответа на этот:Есть ли функции Korn Shell, которые не реализованы в Zsh?Если так, то кто они?

решение1

ВотСтатья в Википедии о сравнении командных оболочек.

Согласно этому, единственная функция, которой обладает ksh, но которой нет у zsh, этоИменованные параметрыдля определяемых пользователем "типов". Могут быть и другие, поскольку эта статья не является исчерпывающим списком, особенно для малоизвестных функций.

Двигаясь в другом направлении, ответ на ваш вопрос мог бы заполнить целую книгу (возможно,Вот этот).

Zsh имеет много функций, которых нет у ksh. Несколько популярных из них:стек команд,стек каталогов,история обменаиrprompt.

  • Стек командэто когда вы вводите команду и понимаете, что сначала нужно запустить другую команду. Просто отправьте текущую строку в стек команд, запустите другую команду, а затем вытащите команду из стека. Вы можете сделать это несколько раз. (zsh — единственная известная мне оболочка, которая это обеспечивает).
  • Стек каталогов(он же pushd/ popd) — это когда вы хотите последовательно перейти в каталоги, а затем вернуться в обратном порядке. (Многие оболочки предоставляют такую ​​возможность, включая bash).
  • История обменагде каждая открытая оболочка разделяет одну общую историю. Выполните команду в одном окне, переключитесь в другое, и она будет доступна в вашей истории.
  • rpromptэто то же самое, что и ваш запрос, только он выровнен по правому краю. Многие любят ставить cwdor dateв rprompt.

Вот некоторые обсуждения zsh на сайтах Stack Exchange:

решение2

ksh88, наиболее известный вариант, поскольку он был включен в SVR4, bashна котором в основном основан язык, частично клонированный pdksh, и чье подмножество является основой для спецификации POSIX, shне претерпел значительных изменений (за исключением некоторых исправлений ошибок и выравнивания POSIX некоторыми поставщиками) с момента своего последнего выпуска в мае 1993 года (ksh88i).

Однако ksh93, переписанный Дэвидом Корном, впервые выпущенный в декабре 1993 года, находился в активной разработке примерно до 2014 года, а его исходный код былосвобожденныйв 2000 году. Последний официальный релиз, ksh93u+, был выпущен в августе 2012 года (всего через несколько недель после того, как вы задали этот вопрос), а в 2014 году была выпущена «бета»-версия (ksh93v-), выпущенная первоначальными авторами после того, как они были уволены AT&T, со множеством новых функций.

Сообщество предприняло усилия по продолжению разработки и модернизации кода на основе ksh93v-, что привело к появлению ksh2020, ноэти усилия теперь прекращены. Аотдельные усилия по поддержанию ksh93u+после этого, кажется, все идет по тому же пути. В то время какновый (ksh93u+m)На данный момент ситуация выглядит более многообещающей.

ksh93 — это/было больше, чем просто оболочка. Он был разработан вместе с целым рядом утилит, повторно использующих часть того же кода, и это можно было сделать встроенным в ksh93, немного похоже на busybox.

Обратите внимание, что это было скорееисследоватьусилия, часто считается экспериментальным и очень плохо документирован.

Хотя zshизначально он был разработан как мощная интерактивная оболочка, фокус ksh93 был больше как язык программирования. Было приложено много усилий к языку и оптимизации с целью попасть в похожую категорию, например, или perl.python

Есть много-много функций ksh93, которых нет в zsh, как и много-много функций zsh, которых нет в ksh93, и оба заимствовали функции друг у друга. Есть большой набор общих функций, и есть вещи, которые оба могут делать, но очень по-разному.

Вот некоторые вещи, которые есть в ksh93, но отсутствуют в zsh:

  • все встроенные функции ast-open: ksh93при сборке как части ast-open имеет множество встроенных функций, которых нет в zsh, включая улучшенные версии некоторых стандартных утилит, таких как date, join, head, tr, uniq, wc... (хотя zsh имеет некоторые из их функций в своих собственных встроенных функциях или языковых функциях). Этооптимизациясторона вещей. Вы не можете быть perl-типа, если вам нужно разветвить процесс, чтобы что-то сделать.
  • Подстановки команд без разветвления ( $(...)) и подстановки команд, не создающие среду подоболочки ${ ...; }.
  • многомерные массивы:a=((a b) (c d))
  • Возможности объектно-ориентированного программирования (типы, структуры, дисциплины, методы...).
  • статическая область видимости для переменных и опций ( zshимеет privateдля переменных, но не имеет статической области видимости для опций).
  • ссылки на имена (важны для оболочек со статической областью действия и структурами объектного программирования, но не так важны для оболочек с динамической областью действия, таких как zsh или bash)
  • Манипулирование датой/временем, в том числе с использованием естественного языка, crontab, iso-форматов в его printfвстроенных dateфункциях ( по сравнению с этим zsh's весьма ограничен).strftime
  • несколько полезных операторов перенаправления ( <#((...))для поиска, <>;перезаписи и усечения...).
  • пространства имен
  • пулы рабочих мест и кошеллы.
  • Кодирование/декодирование CSV/URI/HTML-сущностей/base64.
  • кодирование/декодирование json в ksh93v - для (де)сериализации его расширенных структур данных в формате, который могут понять другие инструменты (очень глючный, удален в ksh2020).
  • $"..."для локализации сообщений
  • /dev/tcp, /dev/udp( zshимеет ztcp, zsocketдля сокетов домена UNIX, но не UDP)
  • Также в 90-х годах существовала dtkshоболочка, которая добавляла функциональность X toolkit к ksh93, включенному в CDE.
  • есть shcompккомпилироватькод кш.

Связанный контент