しばらくBashを使ってきました。これで、少なくとも1つ以上の他のシェルを学びたいので、Korn Shellを学んでいます。しかし、Kshはほぼ20年間、主要なアップデートがなかったように見え、ZshがKshの機能をマージしたことを読んでいます。 StackExchangeネットワークで多くのシェル比較質問を読みましたが、答えが見つかりませんでした。Zshに含まれていないKorn Shell機能はありますか?それでは、それらは何ですか?
答え1
これはコマンドシェルの比較に関するWikipediaの記事。
これによると、kshにはあるがzshにはない唯一の機能は次のとおりです。名前付きパラメータカスタム「タイプ」の場合。特にあいまいな機能の場合、この文書は完全なリストではないため、他の機能もある可能性があります。
逆に言えば、あなたの質問に対する回答が本の一冊を埋めるかもしれません(おそらくこれ)。
Zshにはkshにはない多くの機能があります。人気のあるものは次のとおりです。コマンドスタック、ディレクトリスタック、歴史の共有そしてヒント。
- コマンドスタックコマンドを入力し、他のコマンドを最初に実行する必要があることに気付く場合です。現在の行をコマンドスタックに送信し、別のコマンドを実行し、スタックからそのコマンドをポップします。これは複数回行うことができます。 (zshはこの機能を提供する唯一のシェルです。)
- ディレクトリスタック(別名
pushd
/popd
)は、ディレクトリを継続的に変更し、逆の順序でCDに戻す場合に使用されます。 (Bashを含む多くのシェルがこの機能を提供します)。 - 歴史の共有開いている各シェルには共有履歴があります。あるウィンドウでコマンドを実行して別のウィンドウに切り替えると、そのコマンドを履歴で使用できます。
- ヒントあなたのヒントと同じです。しかし、それは正しいです。多くの人が入れるの
cwd
が好きです。date
rprompt
以下は、Stack Exchangeサイトのzshに関するいくつかの議論です。
答え2
SVR4に含まれる最も有名なバリエーションであるksh88は、主にbash
部分的に複製されたpdkshに基づいています。 pdkshのサブセットはPOSIX仕様の基礎ですが、あまり開発されていsh
ません(いくつかのバグ修正とPOSIXソートを除く)。 )以降、一部のベンダーは、1993年5月の最終リリース(ksh88i)以降、このバージョンを使用してきました。
しかし、David Kornが書き直したksh93は1993年12月に初めてリリースされ、2014年頃まで活発に開発されておらず、ソースコードは次のとおりです。リリース2000. 最後の公式バージョンである ksh93u+ は 2012 年 8 月にリリースされ(この質問をしてから数週間で)、ワン作成者は AT&T の重複以降、2014 年に多くの新機能を含む「ベータ」バージョン (ksh93v-)リリースしました。
コミュニティでは、ksh93vに基づいて開発し、コードを近代化する作業を進めており、その結果ksh2020が誕生しました。この努力は今放棄されました。 ㅏksh93u+を維持するために単独で作業それからまた同じ道を歩くようだった。たとえ新規(ksh93u+m)現時点では、もう少し有望に見えます。
ksh93は単純なシェル以上です。これは、同じコードの一部を再利用し、ビジボックスに似たksh93に組み込むことができるユーティリティセットとして開発されました。
これはもっとです。研究これらの努力は通常実験的なものと見なされ、文書化されていません。
ksh93は最初はzsh
強力なインタラクティブシェルとして開発されましたが、ksh93の焦点はプログラミング言語に近いです。同様のperl
カテゴリになることを目指して、言語と最適化に多くの努力を払いましたpython
。
ksh93にはzshにはない多くの機能があります。まるでzshにksh93にない多くの機能があり、どちらもお互いの機能を借りたようです。彼らは多くの共通点を持っており、どちらも何かをすることができますが、方法は非常に異なります。
ksh93にはあるがzshには含まれていない機能:
- ast-openのすべての組み込み機能:ast-openの一部として構築されている場合、、、、、、、...
ksh93
などのいくつかの標準ユーティリティの拡張バージョンを含むzshにはない多くの組み込み機能があります。 (zshには組み込み機能や言語機能に他の機能がありますが)。これはdate
join
head
tr
uniq
wc
最適化物事の側面。perl
何かを行うためにプロセスを分岐する必要がある場合は、これを行うことはできません。 - 非分割コマンド置換(
$(...)
)とサブシェル環境を生成しないコマンド置換${ ...; }
。 - 多次元配列:
a=((a b) (c d))
- オブジェクト指向プログラミングの特性(タイプ、構造、分野、方法...)
- 変数とオプションの静的範囲(変数には静的範囲
zsh
がありますが、オプションはありません)。private
- 名前参照(静的スコープとオブジェクトプログラミング構成を持つシェルに必要であり、zshやbashなどのダイナミックスコープを持つシェルにはあまり重要ではありません)
- 自然言語、crontab、組み込みのiso形式(比較的非常に制限的)を含む日付
printf
/date
時刻zsh
操作strftime
。 - いくつかの便利なリダイレクト演算子(
<#((...))
検索、<>;
上書き、切り捨てなど)。 - 名前空間
- 作業プールとcoshell。
- CSV/URI/HTML エンティティ/base64 エンコード/デコード。
- ksh93vのjsonエンコーディング/デコード - 他のツールが理解できる形式で高レベルのデータ構造を(逆)シリアル化します(多くのバグ、ksh2020から削除されます)。
$"..."
メッセージのローカライズのため/dev/tcp
、/dev/udp
(UNIXドメインソケットの場合UDPzsh
はありますがztcp
UDPはありません。)zsocket
dtksh
1990年代には、CDEに含まれるksh93にXツールキット機能を追加するシェルもありました。- 一つが
shcomp
届きました編むKSHコード。