この質問を改善したいですか? 質問を更新して、この投稿を編集するだけで1つの問題に焦点を当てるようにします。
6年前に閉鎖されました。
この質問を改善する
主流の*NIXシェルと、どちらか一方を使用するように促すシナリオとの基本的な違いは何ですか?その一部はおそらくユーザーの好みに起因することを理解していますが、私はBashを使用したことがあり、別のシェルが役立つ可能性がある場所を知りたいと思っています。
また、あるシェルまたは別のシェルで実行する場合、ユーザー作成のシェルスクリプトに影響がありますか、それとも単にファイルの先頭にあるシェルを変更するだけの問題ですか?私の本能は、それはそれほど簡単ではないと言っています。
承認された回答:
インタラクティブに使用するために、Bashとzshの2つの主要な候補に加えて、ストラグラーtcshと新参の魚がいます。
-
BashはGNUプロジェクトの公式シェルであり、ほとんどのLinuxディストリビューションのデフォルトシェルです。基本インストールの一部として適切なインタラクティブシェルが付属していない他のユニスでは、自己強化型の「Bashはどこにでもあるので、私も使用します」ループで、Bashが選択される傾向があると思います。なぜBashはどこにでもあるのですか?も参照してください。 (多くの履歴情報があります)。
-
Zshには、Bashのほぼすべての機能と、さらに多くの(便利な!)機能があります。その主な欠点はあまり知られていないことです。これは、実際問題として、他の誰かがセットアップしたシステムにすでにインストールされている可能性が低く、サードパーティのドキュメントが少ないことを意味します。 「どのzsh機能を使用していますか?」、「zshにあり、Bashにない機能、またはその逆」、「BashとZshの実際的な違いは何ですか?」も参照してください。
-
Tcshはかつて(1990年代初頭まで)、その前身のcshのように、最高のインタラクティブ機能を備えたシェルでした。そのため、インタラクティブな使用で人気がありました(ただし、スクリプトでは使用できません)。 Zshはtcshに追いつき、かなり迅速にさらに改善し、Bashは2000年代初頭に(プログラム可能な完了で)追いつきましたが、tcshは過去15年間ほとんど進歩していません。したがって、今tcshを学ぶ理由はほとんどありません。
-
魚は前任者よりもきれいにしようとします。いくつかの優れた機能(より単純な構文、コマンドラインでの構文の色付け)がありますが、他の機能はありません(作成者が気に入らないものは何でも)。魚のコミュニティはzshよりもはるかに小さく、影響はさらに深刻になります。
スクリプトの場合、スクリプトの移植性に応じて、ターゲットにする言語がいくつかあります。
-
Unixライクなふりをするものはすべて、Bourne派生シェルを
/bin/sh
として持っています。 。/bin/sh
の周りにはまだいくつかの商用ユニスがあります POSIXに準拠していません。 -
現在実行中のほとんどすべてのUNIXには
sh
があります 少なくともPOSIX.2-1992、通常は少なくともPOSIX:2001a.k.a.シングルUnixv3に準拠している実行可能ファイル。このシェルは、/usr/bin/posix
などの別のディレクトリにある可能性があります または/usr/xpg6/bin
。 POSIXエミュレーションレイヤーは、それをサポートするのに十分強力なほぼすべてのシステムにも存在し、魅力的なターゲットになっています。 -
多くのUNIXシステムにはksh93があり、POSIX shにはない非常に便利な機能(配列、連想配列、拡張グロブ(
*(foo)
)を提供します。 、@(foo|bar)
、…)、nullグロブ(~(N)foo*
)、…)。 Kshは当初商用ソフトウェアであり(いくつかの習慣が設定された後、2000年に無料になりました)、多くの無料ユニス(Linux、* BSD)は、これらの便利な機能の多くを欠くはるかに古い無料クローン(pdksh)のみを提供する習慣になりました。 。 Pdkshは現在OpenBSDの外でmkshに置き換えられていますが、mkshでさえすべてのksh93機能を実装するには不十分です。今日、ksh93がどこでも利用できることを期待することはできません。特に、Bashが標準であるLinuxではそうです。 -
Bashは、Linux(一部の組み込みバリアントを除く)で常に使用可能であり、多くの場合、他のユニスで使用できます。 ksh93の便利な機能のほとんどが含まれていますが、構文が異なる場合もあります。
-
Zshには、ksh93とBashの便利な機能のほとんどがあります。そのコア構文はよりクリーンですが、Bourneとは互換性がありません。 macOSを除いて、インストールしていないシステムでzshが利用可能であることを期待しないでください。
-
より高度なスクリプトについては、PerlまたはPythonを使用できます。これらの言語には、適切なデータ構造、適切なテキスト操作機能、適切なプロセスの組み合わせと通信メカニズム、および多数の利用可能なライブラリがあります。ほとんどのUNIXシステムには、OSにバンドルされているか、管理者によってインストールされたものがあります(PerlおよびPythonスクリプトが非常に多いため、それぞれが少なくとも1つないまれなシステムであるため)。