特殊な Solaris 整数比較動作

特殊な Solaris 整数比較動作

これは私をパニックにさせました!

私たちは、何年も不満なく実行されてきた重要なスクリプト/プロセスをホストするSolarisシステム(バージョン:SunOS 5.8)を持っています。私たちは最近、もっと深く掘り下げて、私が知っている限り動作しないはずですが、何らかの理由で動作するテスト条件を見つけました。

$ sh
$ [ 90% -gt 95 ]; echo $?
1
$ [ 96% -gt 95 ]; echo $?
0

何? !これは偶然のようには見えません。

$ [ 96% -lt 95 ]; echo $?
1
$ [ 96% -eq 96 ]; echo $?
0   

%これは、次の2つのうちの1つではありません。

$ [ 96blah -eq 96 ]; echo $?
0
$ [ 1.2 -gt 1 ]; echo $?
1

これはSunOS 5.8、5.9、および5.10の場合であるように見えますが、これまでは見つかりませんでした。残念ながら、bashへのシンボリックリンクがないことを簡単に確認できる他の非Solarisシステムがないようです/bin/sh(それほど解釈されません)。

もしそうであれば、粗いコード(変数を通過し、おそらく気づかないかもしれない)を除いて、x%なぜ標準(おそらくBourne?)シェルはこれらのテストパラメータを切り取り、整数として扱うのですか?これは文書化された動作ですか?何も見えませんが、man shおそらく何かを逃したようです。

注:これは実際には他の奇妙なテスト条件では軽微ですが、自分で質問する価値があるかもしれません。

ベストアンサー1

コメントを期待する行に合わせてフォーマットすることはできないため、回答フォームを使用してPOSIXシェルを取得する方法についてのコメントを説明しています。

POSIXシェルを取得する公式の方法は次のとおりです。

1)  unset PATH                       # if you run an older Bourne Shell
2a) PATH=`getconf PATH`              # this is with the Bourne Shell
2b) PATH=$(command -p getconf PATH)  # this is with a Korn shell
3)  sh                               # This starts a POSIX shell

標準化のためのいくつかの試みがありましたが、#!/path/to/shellPOSIXはPATHを処理しなかったため、解決策を見つけることができませんでした。

おすすめ記事