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 年。具有許多新功能。

社群一直致力於基於 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 代碼。

相關內容