これは私をパニックにさせました!
私たちは、何年も不満なく実行されてきた重要なスクリプト/プロセスをホストする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/shell
POSIXはPATHを処理しなかったため、解決策を見つけることができませんでした。