前述のように、bash
多くのディストリビューションのデフォルトのインストールで一般的に利用可能です。あなたのスクリプトはに依存することで最大のユーザーベースに到達しませんzsh
。
スクリプトを設計する前に答えるべき重要な質問は、「スクリプトを実行するシェルが重要なのはなぜですか?」です。
異なるシェルは異なる構文を使用するか、他のシェルではサポートされない追加のシェル機能を提供します。「一般的なLinuxエンドユーザーワールド」用のスクリプトを作成するには、スクリプトが特定のシェル環境に依存する構文またはシェル関数を使用しているかどうかを判断します。
たとえば、bash
シェルはdash
、、Bourneシェル、または/bin/sh
ユーザーのシステム上のどのポイントでもサポートされていない特定の拡張をサポートします。
$ ls -l /bin/sh
lrwxrwxrwx 1 root root 4 Feb 19 2014 /bin/sh -> dash
echo {1..10}
と/bin/sh
比較して実行すると、/bin/bash
非常に異なる出力が得られます。
同じことは、zsh
ほとんどのbash
構文をサポートしながら、bash
シェルでサポートされていない追加の拡張と構文を提供します。特定の例については、シェルを比較するこの表を参照してください。
でbash
呼び出され#!/bin/sh -u
たときに機能するスクリプトに従うことで、潜在的なユーザーベースを広げることができます。ただし、これにより、「移植性の向上と引き換えに何が犠牲にされていますか?」
セキュリティ上の懸念、機能、効率性、またはスクリプトの優先事項であると感じる他の何かに関連する違いを犠牲にする価値があるかどうかを判断します。より多くの環境で機能するという理由だけで、既知のセキュリティ脆弱性を持つスクリプトを広く使用したくない場合があります。
コマンドシェルを比較するbash
際の基準として、これらのスクリプトのサポートが使用されるため、多くのスクリプトが記述されています。スクリプトに依存する場合やシェル環境専用の他の構文よりも多くの人がスクリプトを実行できます。zsh
また、ユーザーがスクリプトを実行する方法を最終的に制御できないことに注意してください(異なるシェルでのスクリプトのデバッグにも役立ちます)。
シェルを使用してシェルスクリプト(「sh scriptname」)を読み取る場合、直接実行するのではなく(「./scriptname」)、シェルはシェルスクリプトの先頭にあるすべてのコメントをコメントとして扱うことに注意してください。特に、スクリプトの実行時に使用するインタープリターを指定するコメント(「#!/ bin / sh -u」)は無視され、そのインタープリターの横にリストされているすべてのオプションも無視されます。
そのため、スクリプトの移植性を高めることは、スクリプトが機能する方法に大きな犠牲がない限り実行できます。
また、Bashのコーディング規約-Stack Overflowも参照できます。
zsh
人気があるかもしれませんが、他のサークル(銀行セクター)ではほとんど前代未聞です。これに関する適切なアドバイスが必要な場合は、もっと多くの情報を提供する必要があると思います。