ダッシュ、アッシュ、およびshスクリプトは完全に互換性がありますか?


16

ダッシュ、アッシュ、およびsh用に記述されたスクリプトが100%互換であるかどうかを知りたいですか?

ダッシュまたはアッシュに追加された機能、または構文の変更はありますか?

私が聞いたところから、灰はshの直接の子孫です。


灰はバッシュのストライプダウン形式です
ジョー

4
ソース?ashはbashに関連していると言っているものは何もありませんでした
-user1115057

あらゆる種類のシェルを作成するのではなく、なぜ人々は単にbashにパッチを提出しないのでしょうか。あなたが本当に知りたいなら、マニュアルを読んでください、例えばman ash
デイジー

2
正しい、それはbashの子孫ではありません。sh(元のBourneシェル)の子孫であると言う方が正確ですが、それも完全に正しいわけではありません。
ズラトコ

ユーティリティcheckbashismsを使用して、スクリプトがPOSIX準拠であることをテストできます。
-donothing正常に

回答:


18

簡単な答えはノーです。100%互換性はありません。

しかし、ほとんどのシェルは基本に非常に近いため、矛盾に遭遇することはほとんどありません。実際、ほとんどのシェルは、追加された構文によって大きく異なるのではなく、タブ補完などの追加機能によって大きく異なります。

また、正確には、BSDからLinuxへの移植のdash一種ですash。そして、それらのすべては、子孫またはの異なる実装でなければなりませんsh。実際、shほとんどのシステムでは、への単なるシンボリックリンクbashdashまたは何か他のものです。重要なのはPOSIX準拠です。標準に従ってスクリプトを作成する場合、問題は発生しません。

これらのシェルの違いは、最適化とパフォーマンスです。それらは機能豊富ではありませんbashが、完全に正当なシェルです。Bashはインタラクティブな作業には機能豊富ですが、たとえば、より多くのメモリを使用します。


しかし、スクリプトの使用については、互換性はありますか?
user1115057

POSIX準拠については、たとえその標準に従ったとしても、Bash用のスクリプトが書かれていれば、shまたはその子孫で実行されるとは思わない
-user1115057

あいまいな機能を使用していない場合は、相互に互換性がある必要があります。ただし、bashスクリプトを使用すると、さらに多くの問題が発生する可能性があります。
ズラトコ

bashをshまたはashまたはdashと一緒に使用することは決してありません。それらのあいまいな機能は何ですか?
user1115057

1
bashの新しい機能の多くはPOSIXに対する追加機能であるため、それらを使用している場合は移植性のないコードを記述する可能性が高くなります。IIRCは、[[]]コンストラクトでさえshにはありません。また、純粋なシェルスクリプトを作成していない場合は、ツールの違いも影響することに注意してください(sed、grep、awkの異なるバージョン...)。
lynxlynxlynx

1

一部のシステム、特にDebianでは、/ bin / ashは利用できないことに注意してください:

$ type ash dash
bash: type: ash: not found
dash is /bin/dash

2
彼らはbusybox灰を持っているかもしれません。
ムル
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.