なぜzshの代わりにbashを実行したいのか興味があります。つまり、zshはbashと完全に後方互換性があります。誤解しないでください。bashなどは嫌いではありません。zshよりも優れた点があるかどうかを知りたいだけです。
それでは、zshよりもbashを使用する理由は何ですか?
なぜzshの代わりにbashを実行したいのか興味があります。つまり、zshはbashと完全に後方互換性があります。誤解しないでください。bashなどは嫌いではありません。zshよりも優れた点があるかどうかを知りたいだけです。
それでは、zshよりもbashを使用する理由は何ですか?
回答:
2つの理由が思い浮かびます。
まず、実際にどこでも利用可能です。zshがインストールされていないLinuxシステム(この場合はCentOS 4.x)がいくつかあります。同様に、Solaris 2.6以上、HP-UX 10以上、および同様にきびきびしたバージョンのAIXなどの古いシステムに触れる必要があります。したがって、私はこれらのコンピューターでbashを使用する必要があります。1か月にわたって数百台ではなくても数十台の個々のコンピューターに触れ、インターフェイスの一貫性を保つために、デフォルト。
第二に、それは事実上どこでも利用可能です。これは、bashシェルスクリプトを記述でき、他の場所に転送したときに機能することを99%確信できることを意味します。
はい、これらの理由は表面的には同じですが、その背後にある理由は異なります。
通常、bashはすべてのシステムに付属していますが、zshには付属していません。私はzshが大好きですが、このため、インタラクティブな使用にはzshを使用しますが、すべてのスクリプトにはBashを使用します。
これにより、bash互換(setopt SH_WORD_SPLIT?)
zshは完全にbashと互換性がありません。さまざまな違いがあります。新しいzshはbashとより互換性があります(=〜がサポートされ、execには追加のフラグオプションなどがあります)が、完全な互換性は「エミュレート」の下でも目標ではありません。
たとえば、bashの部分文字列は$ {foo:offset:len}ですが、zshでは$ foo [start、end]であり、これは1つの簡単な例です。
zshはtcshとkshの影響を受けたシェルで、独自の方法で多くのことを行います。POSIXの互換性は明らかに目標ではありませんが、開発者はPOSIXに近づけるオプション/エミュレート動作を追加するパッチに敏感です。しかし、シェルの力を実際に使い始めると、bashよりも書き込み専用のスクリプトを作成し始めます。
bashはPOSIX sh + ksh + pedanticismであり、一部の機能はzshからコピーされました。書き込み専用のスクリプトもありますが、演算子があまり強力ではないため、zshの簡潔さを使用せずに読みやすくなる可能性があります(空白の分割を避けるためのすべての引用を除き、愚かな kshスタイルの$ arrayは最初に意味します)配列のすべての要素ではなく、配列の要素など)。
いずれかのシェルの力を最大限に活用するスクリプトを書くことは、制約された環境にいる場合を除き賢明ではありません(たとえば、システムのrcスクリプトを書く、FSがマウントされないなど)。理想としては、他の人がそれを維持できるようにしたい場合は、Bourne sh以外の表現力が必要な大きさであれば、Perl / Python / Ruby / whateverを使用してください。対話型シェルに関連するもの(タブ補完プログラミングなど)のために、シェルのものを保持します。
zshではなくbashを使用しません。単純なスクリプトにはzshを介してbare shを使用するか、連想配列に適切な演算子がある言語に切り替えます(zshとは異なり、それらは再び「簡潔」です)。既存の実績のあるスクリプトを拡張するためにその小さな機能が必要であり、今それを書き換える時間がない場合、shスクリプトをbashに切り替えることができます。
私のアドバイス:絶対的な移植性を求めているなら、Bourneシェルルールを使用して記述し、Kornシェル拡張機能さえ気にしないでください。前述のように、それはいくつかの古い「大きな箱」であり、GNUシェルがまったくありません。
Bashはすでに「多すぎます」。職場にはzshを好む友人がいますが、それが正確に何をするのかわかりません。
とにかく、Bourne(または「bourne again」)シェルに書き込むか、または少数の特定のボックスに対してカスタムスクリプトを実行する場合は、「shell hell」を完全にスキップして、perlまたはpython(または何でも)を使用して書き込みます。ローカルにインストールされているお気に入りのインタープリターです)。
ちなみに、bashは事実上どこにでもあると何度も言われているので、それを使用して移植可能なスクリプトを記述しますが、これは誤りです。
ナンセンス。関心のあるすべてのシステムにBASHがあることがわかっている場合、それは完全に合理的なステートメントです。BASHには、POSIX shで合理的にエミュレートできない多くの便利な機能があります。POSIX以外の機能を軽んじて使用するのは良い考えではありませんが、本当に必要なときにそれらを使用することは問題ありません。
移植性は絶対的なものではありません。他のものと同じように、あなたがそれをどこまでとる必要があるかは議論の余地があります。たとえば、FedoraはRPMパッケージのビルドにシェルコマンドを使用し、Fedoraパッケージガイドラインでは、すべてのパッケージをFedoraでネイティブにビルドする必要があるため、BASHのすべての機能を使用しても問題ないと述べています。理論的には、BASHを使用しない他のディストリビューションはソースRPMを再利用したい場合がありますが、「ALWAYS UZE POSIX !! 1」マントラではなく実用性に基づいて移植性を決定しました。
ZSHがデフォルトのシェルとして受け入れられていないのは、単に中途半端なアイデアの広大な混乱だからです。
ところで、あなたはここで何度も言われているbash
ので、ポータブルスクリプトを記述するためにそれを使用し、実質的にどこにでも発見されたが、偽です。
移植可能なUNIXスクリプトを記述する正しい方法は、すべての* nixシステムにあるsh
、使用することです。
他のすべてのシェルsh
は、毎日のインタラクティブなツールです。
来たときbash
VS zsh
- bash
以上にバンドルされている*nixes
よりもzsh
、ので、ここでシステムに追加のソフトウェアをインストールするの欠点を来る-あなたはそれを維持する必要があります。一部の人々はzshの「クールな機能」を愛しているため、その代価を支払うのが好きですが、そうでない人もいます。
別のポイント:
多くのプログラムは、デフォルトでクールなbash補完を提供します。私にとっては、切り替えない理由です。
[2013年7月に追加]上記のコメントから数年後にzshを使用した後、タブ補完(組み込みのものであっても、サードパーティの修正なし)が素晴らしいと言わなければなりません。 。:)。