Похоже, на это был дан ответ в комментариях: У Solaris sh
есть причуды. По крайней мере, в прошлом это даже не была оболочка POSIX . (Шили указывает, что POSIX не требует, чтобы / bin / sh
был POSIX sh
, что означает, что вам нужно перепрыгнуть через другую петлю, чтобы написать полностью переносимые сценарии оболочки.)
Этот вопрос может содержать полезную информацию / ссылки: https://superuser.com/questions/125728/what-is-the-difference-between-bash-and-sh
Ответ Шили указывает на то, что стандарт не определяет, что происходит с числами с мусором в конце, поэтому ваш сценарий фактически имеет неопределенное поведение и полагается на то, что делает Solaris sh
. Таким образом, он не переносится.
Подобные вещи являются основной причиной, по которой, по-видимому, не рекомендуется использовать bash
как / bin / sh
в системе Solaris. Некоторые дистрибутивы GNU / Linux используют тире
для / bin / sh
, в то время как другие используют bash
.
Я тестировал ваш код на трех установленных мною оболочках:
bash 4.3-11ubuntu2
$ [ 96blah -eq 96 ]; echo $?
bash: [: 96blah: integer expression expected
2
dash 0.5.7-4ubuntu1
$ [ 96blah -eq 96 ]; echo $?
dash: 1: [: Illegal number: 96blah
2
busybox sh 1.22.0-9ubuntu1
$ [ 96blah -eq 96 ]; echo $?
sh: 96blah: bad number
2