У меня тот же процессор, и Openmandriva LX 3 работает нормально, единственная проблема - он слишком медленно запускается (я установил его на жесткий диск SATA).
Я пробовал Manjaro, freya, Mint и Opensuse, и это не сработало. Думаю, проблема в версии ядра, Openmandrive использует 4.6.5.
Это расширение bash
(а также zsh
, ksh
и его производные), чтобы переменная оболочки могла содержать недопустимую целочисленную константу для повторного использования в арифметических выражениях.
Переменные оболочки разрешены как операнды; раскрытие параметра выполняется до вычисления выражения. В выражении на переменные оболочки также можно ссылаться по имени без использования синтаксиса раскрытия параметра . Переменная оболочки, имеющая значение NULL или не заданная , оценивается как 0 при ссылке по имени без использования синтаксиса раскрытия параметра . Значение переменной оценивается как арифметическое выражение , когда на нее ссылаются, или когда переменной, которой был присвоен целочисленный атрибут с помощью 'declare -i', назначается {{1} } стоимость. Нулевое значение оценивается как 0. Целочисленный атрибут переменной оболочки не обязательно должен использоваться в выражении.
Итак, в вашем случае $ ((x))
сначала расширил x
до foo
, что является недопустимым целым числом, поэтому foo
повторно используется как ссылка на имя переменной.Затем foo
был расширен до bar
, процесс повторялся, пока вы не получили 6
, что является действительным целым числом.
В спецификации POSIX указано только, что $ ((x))
и $ (($ x))
вернут одно и то же значение, только если x
является допустимая целочисленная константа. Он ничего не говорит о том, что случай x
является недопустимым целым числом, поэтому реализации оболочки могут справиться с этой ситуацией.
Результат можно варьировать с разными снарядами.
zsh
, ksh
и его производные ведут себя как bash
выше (а также busybox sh
).
ash
, dash
вызывают ошибку, если x
содержат недопустимое целое число
$ x=foo foo=bar bar=6 dash -c 'echo "$((x))"'
dash: 1: Illegal number: foo
yash
оставляет переменную как есть:
$ x=foo foo=bar bar=6 yash -c 'echo "$((x))"'
foo