質問: 主流の* nixシェルの基本的な違いは何ですか? 主流の* nixシェルの基本的な違いは何ですか?また、どのシナリオを使用してどちらか一方を使用するように促される可能性がありますか?一部はおそらくユーザー設定に起因することを理解していますが、私はbashを使用したことがないので、別のシェルが役立つ可能性がある場所を知りたいです。また、1つのシェルまたは別のシェルの下で実行すると、ユーザー作成のシェルスクリプトに影響がありますか、それとも単にファイルの先頭にあるシェルを変更するだけの問題ですか?私の本能はそれは簡単ではないと言います。
回答: インタラクティブな使用のために、2つの主要な候補 bash および zsh に加えて、ストラグラー tcsh および新参者 fish があります。 bashはgnuプロジェクトの公式シェルであり、ほとんどのlinuxディストリビューションのデフォルトのシェルです。ベースインストールの一部として適切なインタラクティブシェルが同梱されていない他のuniceでは、bashは自己強化の「bashはどこにでもあるので、私も使用する」ループで人々が選択する傾向があります。また、 なぜbashがどこでもあるのですか? (多くの履歴情報がある)も参照してください。 zshには、bashのほぼすべての機能と、さらに多くの(便利な!)機能があります。その主な欠点はあまり知られていないことです。これは、実際には、他の誰かがセットアップしたシステムにすでにインストールされている可能性が低く、サードパーティのドキュメントが少ないことを意味します。 使用するzsh機能は何ですか? 、 zshにあり、bashにない機能、またはその逆はありますか? も参照してください。 tcshはかつて(1990年代初頭まで)、その前身のcshと同様に、最高のインタラクティブ機能を備えたシェルでした。これにより、インタラクティブな使用が一般的になりました(ただし、 スクリプトでは使用できません )。 zshはtcshに追いつき、かなり急速にさらに改善し、bashは(プログラム可能な完了により)2000年代初頭に追いつきましたが、tcshは過去15年間ほとんど進歩していません。したがって、今tcshを学ぶ理由はほとんどありません。 魚は前作よりもきれいにしようとします。それはいくつかのきちんとした機能(より単純な構文、コマンドラインでの構文の色分け)を備えていますが、他には欠けています(作成者が好まないものは何でも)。魚の群れはzshの群れよりもはるかに小さく、その影響はさらに深刻になります。 スクリプトの場合、スクリプトの移植性に応じて、ターゲットにしたい言語がいくつかあります。 unixライクのふりをするものには、_/bin/sh_として bourne から派生したシェルがあります。 _/bin/sh_が [〜#〜] posix [〜#〜] に準拠していない場所には、まだいくつかの商業的ユニックスがあります。 現在実行中のほとんどすべてのunixには、少なくともposix.2-1992に準拠し、通常は少なくとも posix:2001 a.k.a. single unix v に準拠するsh実行可能ファイルがあります。このシェルは、_/usr/bin/posix_や_/usr/xpg6/bin_などの別のディレクトリにある場合があります。 posixエミュレーション層は、それをサポートするのに十分強力であり、魅力的なターゲットとなるほぼすべてのシステムにも存在します。 多くのunixシステムには ksh9 があり、posix shにはないいくつかの非常に便利な機能(配列、連想配列、拡張グロブ(*(foo)、@(foo|bar)、...) 、ヌルグロブ(~(n)foo*)、...)。 kshは当初商用ソフトウェアでした(いくつかの習慣が定着した後、2000年に無料になりました)。多くの無料のユニックス(linux、* bsd)は、はるかに古い無料のクローンのみを提供する習慣になりました( pdksh )これらの便利な機能の多くが欠如しています。pdkshはopenbsdの外部で mksh に置き換わっていますが、mkshでさえすべてのksh93機能の実装には不十分です。今日、 ksh93がどこでも利用できるとは限りません。特にbashが標準であるlinuxではそうです。 bash は常にlinux(一部の組み込みバリアントを除く)で利用可能で、他のunicesでも利用可能です。 ksh93の便利な機能のほとんどを備えていますが、構文が異なる場合もあります。 zsh はksh93とbashの便利な機能のほとんどを備えています。そのコア構文はより簡潔ですが、bourneと互換性がありません。 macosを除いて、インストールしていないシステムでzshが利用可能であることを期待しないでください。 より高度なスクリプトを作成するには、 perl または python を使用できます。これらの言語には、適切なデータ構造、適切なテキスト操作機能、適切なプロセスの組み合わせと通信メカニズム、および利用可能な多数のライブラリがあります。ほとんどのunixシステムにはそれらがあり、osにバンドルされているか、管理者によってインストールされています(perlとpythonスクリプトが非常に多いため、少なくとも1つもないまれなシステムであるため)それぞれの)。