dash、ash、sh用に記述されたスクリプトが100%互換性があるかどうか知りたいですか?
追加機能はありますか?ダッシュまたはアッシュ、または構文の変更?
聞いたところによると、アッシュはshの直接の子孫です。
コメント
回答
簡単な答えはノーです。 「100%互換性はありません。
ただし、ほとんどのシェルは基本にかなり近いため、不整合にぶつかることはめったにありません。実際、ほとんどのシェルは、追加された構文ではそれほど違いはありませんが、タブ補完などのいくつかの追加機能が異なります。
また、dash
は
—または正確には、BSDからLinuxへの移植。これらはすべて、。実際、sh
はほとんどのシステムで、bash
、dash
などへのシンボリックリンクです。重要なのはPOSIX準拠—であり、標準に従ってスクリプトを作成する場合、問題が発生することはありません。
これらのシェルの違いは最適化にあります。 bash
よりも機能が豊富ではありませんが、完全に正当なシェルです。 Bashはインタラクティブな作業には機能が豊富ですが、たとえば、より多くのメモリを使用します。
コメント
- ただし、スクリプトの使用に関しては、互換性がありますか?
- POSIX準拠については、その標準に従っている場合でも、スクリプトがBash用に記述されている場合、shまたはその子孫で実行されるとは思わない
- 互換性があるはずです。 'いくつかのあいまいな機能を使用していない場合は、互いに協力してください。ただし、bashスクリプトを使用すると、さらに問題が発生する可能性があります。
- sh、ash、またはdashでbashを使用することを意図したものではありません。それらのあいまいな機能は何ですか?
- 多くのbash 'の新しい機能はPOSIXに追加されているため、
それらを使用しています。 [[]]コンストラクトでさえIIRCはshにありません。また、'純粋なシェルスクリプトを作成していない場合は、ツールの違いも関係することに注意してください(sed、grep、awkのバージョンが異なる…)。
回答
一部のシステム、特にDebianでは、 / bin / ash は利用できません:
$ type ash dash bash: type: ash: not found dash is /bin/dash
コメント
- busyboxの灰がある可能性があります。
- とはいえ、'にも
bash
がないシステムはたくさんあります。
man ash
checkbashisms
を使用して、スクリプトがPOSIXに準拠していることをテストできます。