24

次の意味で、最小限のPOSIX .2 準拠のシェル (と呼びましょう) はありますか。mpcsh

mpcsh myscript.sh私の(準拠した)システムで正しく動作する場合、準拠しているシステムxsh myscript.sh のPOSIX.2準拠のシェルに対して同じように動作xshします。(エラーメッセージの文言など、関連性の低いものまで「同一」)

ダッシュは対象ですか?

そうでない場合、コンプライアンスを確認する方法はありますmyscript.shか?


編集(9年後):

受け入れられた答えはまだ残っていますが、このブログ投稿chackbashismsコマンド ( source ) を見てください。バシズムを回避することは、POSIX.2 準拠のシェル スクリプトを作成することと同じではありませんが、ほぼ同じです。

4

5 に答える 5

5

おそらく正規のシェルashに最も近いのは、NetBSD Foundation などの組織によって維持されているシェルです。

と呼ばれるこのシェルdashのダウンストリーム バリアントの方がよく知られています。

于 2013-01-15T15:49:14.177 に答える
4

現在、の単一の役割モデルはありませんPOSIX shell

オリジナルのBourneシェル以来、POSIXシェルは多くの追加機能を採用しています。

これらの機能を実装していることを私が知っているすべてのシェルには、POSIXシェルの機能セットを超える拡張機能もあります。

たとえば、POSIXでは次の形式の算術式を使用できます。

var=$(( expression ))

ただし、同等のものは許可されません。

(( var = expression ))

とによってサポートされbashksh93います。

私はそれがオプションをbash持っていることを知っていset -o posixます、しかしそれはどんな拡張機能も無効にしません。

$ set -o posix
$ (( a = 1 + 1 ))
$ echo $a
2

私の知る限り、ksh93箱から出してPOSIXに準拠しようとしますが、それでも拡張機能は許可されます。

于 2012-08-09T21:20:42.790 に答える
1

そうでない場合、myscript.sh のコンプライアンスを確認する方法はありますか?

これは基本的に品質保証のケースです。皮切りに:

  • コードレビュー
  • 単体テスト (はい、私はこれを行いました)
  • 機能テスト
  • できるだけ多くの異なるシェル プログラムでテスト スイートを実行してください。( ash, bash, dash, ksh93, ) mksh_zsh

bash個人的には、とでサポートされている拡張機能の共通セットを目指していksh93ます。これらは、利用可能なシェル言語の最も古く、最も広く利用されているインタープリターです。

EDIT最近、シェルコードのテストフレームワークであるrylnd/shpecに出くわしました。テスト ケースでコードの機能を記述し、それらを検証する方法を指定できます。開示:bash、ksh、およびdashで機能するように支援しました。

于 2012-08-09T21:28:27.443 に答える