Ksh 功能合并到 Zsh 中了吗?

Ksh 功能合并到 Zsh 中了吗?

我使用 Bash 已经有一段时间了。我现在想至少学习一种其他 shell,所以我一直在学习 Korn Shell。然而,看起来 Ksh 已经有近二十年没有重大更新了,而且我读到 Zsh 合并了其中的功能。我一直在 StackExchange 网络上阅读许多 shell 比较问题,但没有找到答案:是否存在 Zsh 未包含的 Korn Shell 功能?如果有,它们是什么?

答案1

这是维基百科关于命令 shell 比较的文章

据此,ksh 唯一具有而 zsh 没有的功能是命名参数对于用户定义的“类型”。可能还有其他的,因为该文章并不是详尽的列表,特别是对于晦涩的功能。

从另一个方向来看,你的问题的答案可以写满一本书(可能这个)。

Zsh 有许多 ksh 没有的功能。一些受欢迎的有命令栈,目录栈,历史分享提示

  • 命令栈是当您键入命令并且您意识到应该先运行另一个命令时。只需将当前行发送到命令堆栈,运行其他命令,然后将命令从堆栈中弹出。您可以多次执行此操作。 (zsh 是我所知道的唯一提供此功能的 shell)。
  • 目录栈(又名pushd/ popd)是当您想要连续更改目录,然后按相反顺序 cd 返回时。 (许多 shell 都提供此功能,包括 bash)。
  • 历史分享每个开放的外壳都有一个共同的历史。在一个窗口中执行命令,切换到另一个窗口,该命令将在您的历史记录中可用。
  • 提示就像你的提示一样,只不过它是正确的。很多人喜欢把cwdor放在daterprompt

以下是 Stack Exchange 站点上有关 zsh 的一些讨论:

答案2

ksh88,最著名的变体,因为它包含在 SVR4 中,该语言bash主要基于部分克隆的 pdksh,其子集是 POSIX 规范的基础,但sh尚未发展太多(除了一些错误修复和 POSIX 对齐之外)自 1993 年 5 月最后一次发布 (ksh88i) 以来,某些供应商一直在使用该版本。

然而,由 David Korn 重写的 ksh93 于 1993 年 12 月首次发布,直到 2014 年左右才开始积极开发,其源代码为释放了2000 年。最后一个正式版本 ksh93u+ 于 2012 年 8 月发布(仅在您提出该问题几周后),原作者在发布后于 2014 年发布了一个“测试版”版本 (ksh93v-) AT&T 冗余,具有许多新功能。

社区一直致力于基于 ksh93v 进行开发并使代码现代化,这导致了 ksh2020,但是这项努力现已被放弃。 A单独努力维护 ksh93u+之后似乎又走同样的路。虽然一个新的(ksh93u+m)目前看起来更有希望一些。

ksh93 不仅仅是一个 shell。它是与一组重复使用一些相同代码的实用程序一起开发的,并且可以内置在 ksh93 中,有点像 busybox。

请注意,这更多的是研究努力,通常被认为是实验性的,并且记录很少。

虽然zshksh93 首先被开发为一个功能强大的交互式 shell,但 ksh93 的重点更多地是作为一种编程语言。人们在语言和优化方面付出了很多努力,目标是成为类似的perl类别python

ksh93 有很多特性是 zsh 没有的,就像 zsh 有很多特性 ksh93 没有一样,而且两者都互相借用了特性。它们有很多共同的功能,并且两者都可以做一些事情,但方式却截然不同。

ksh93 有但 zsh 没有的功能包括:

  • ast-open 的所有内置函数:ksh93当作为 ast-open 的一部分构建时,有许多 zsh 没有的内置函数,包括一些标准实用程序的改进版本,例如date, join, head, tr, uniq, wc... (尽管 zsh 有一些其内置函数或语言特性中的功能)。这就是优化事情的一面。perl如果你需要分叉一个进程来做任何事情,你就不能像这样。
  • 非分叉命令替换 ( $(...)) 和不创建子 shell 环境的命令替换${ ...; }
  • 多维数组:a=((a b) (c d))
  • 面向对象的编程特性(类型、结构、学科、方法...)。
  • 变量和选项的静态作用域(zshprivate变量,但没有选项的静态作用域)。
  • 名称引用(对于具有静态作用域和对象编程结构的 shell 来说是必需的,而对于像 zsh 或 bash 这样具有动态作用域的 shell 来说则不是那么重要)
  • 日期/时间操作,包括自然语言、crontab、其printfdate内置的 iso 格式(与此相比,zshstrftime非常有限)。
  • 一些有用的重定向运算符(<#((...))用于查找、<>;覆盖和截断...)。
  • 命名空间
  • 工作池和 coshell。
  • CSV/URI/HTML 实体/base64 编码/解码。
  • ksh93v 中的 json 编码/解码 - 以其他工具可以理解的格式(反)序列化其高级数据结构(非常错误,在 ksh2020 中删除)。
  • $"..."用于消息本地化
  • /dev/tcp, /dev/udp(对于 UNIX 域套接字,zshztcp,,但没有 UDP)zsocket
  • dtksh在 90 年代,还有一个shell 将 X 工具包功能添加到包含在 CDE 中的 ksh93 中。
  • 有一个shcomp编译ksh 代码。

相关内容