Насколько я знал, [[
и [
можно ожидать, что они будут вести себя в основном одинаково, принимая во внимание несколько дополнительных функций [[
. Но недавно я заметил расхождение в том, как bash обрабатывает восьмеричные разложения:
$ b=010; echo $((b))
8
$ [[ $b -eq 8 ]]; echo $?
0
но
$ [ $b -eq 8 ]; echo $?
1
$ test $b -eq 8; echo $?
1
$ [ $b -eq 10 ]; echo $?
0
Почему последнее выражение удаляет автоматическое октальное преобразование? Выражения типа -eq
являются "Арифметическими" в соответствии с help test
в bash и справочном руководстве Bash и далее в соответствии с следующим разделом ссылки Ручные константы с начальным нулем можно рассматривать как восьмеричные.
POSIX sh немного менее понятен по теме: Несмотря на то, что арифметические выражения POSIX по-прежнему расширяют целые числа целых чисел до их восьмеричного значения, это относится к -eq
выражения в test
как алгебраические, а не арифметические.
Есть ли какая-либо документация или доказательства, указывающие на то, что bash делает различие между [[
и [
для восьмеричного расширения целенаправленно или это просто случайная функция?