回答:
GregのWikiには、多くの「バシズム」(非標準だがbashの一部である追加機能)を指摘する、Dash用のbashスクリプトの適応に関する投稿があります。これらのバシズムを回避することで、スクリプトをさまざまな環境で使いやすくすることができます。これは特にあなたの質問のいくつかに答えます。たとえば、はい、異なる(のような==
)演算子がありますが、すべての環境で機能する標準のPosixセットがあります。
より完全に読むには、すべてのシェルが準拠する必要があるPosix標準を確認してください。特に「Shell&Utilities」の巻。
シェルの違いよりも難しいと思うのは、コマンドの違いです。多くのLinuxシステムにはGNU find
がありますが、移植可能なスクリプトを作成している場合は、独自の機能man find
に依存しないでくださいfind
。これは、機能セットが異なるBSD を備えたシステムが数多く存在するためです。busybox用のスクリプトを作成している場合は、完全に異なるを使用した異なるバージョンがあることがわかりますnc
。これらは、スクリプトをさまざまな環境に展開するときに常に私に得られるものです。
優れたシェルスクリプトの実務上の余分な読書のために、デビッドPashleyさんのブログ上の優れたリソースもあります:堅牢なbashのシェルスクリプトの作成します
また、このサイトでGillesの回答とコメントを必ずお読みください。彼には、移植可能なコードを使用するためのヒントがたくさんあります。
特定のシェルでシェルスクリプトを作成するとは、そのシェルがインストールされていることを意味します。唯一の標準が持つことであるcsh
とsh
、すべてのUnixバリアント以上インストールされています。したがって、スクリプトをSolaris、* BSD、およびGNUで実行したい場合は、たとえばBourneシェルでスクリプトを記述する必要があります。
ただし、ほとんどのUnixコマンドは、実装が異なると構文が異なります(ps
Solaris、FreeBSD、GNUで確認してください)。そのため、使用するツールによっては、スクリプトを移植できない場合があります。シェルがインストールされる場所も同様に重要になります。それは/bin/bash
/usr/bin/bash
、/usr/local/bin/bash
どこか別の場所、または?
シェルを定義する標準については知りません。rcやhttp://192.220.96.201/es/es-usenix-winter93.html`">esを見て、奇妙な非標準のシェルを探してみてください。