Если вы ищете простую однострочную версию, это самое надежное решение, которое я нашел, которое возвращает 64 или 32 . Не важно, используете ли вы ARM или нет, и он должен работать в любой системе, использующей bash или sh .
Осторожно, это предполагает, что система является либо 32-битной, либо 64-битной. См. Мое объяснение ниже, если вам нужно обнаружить архитектуру 8-16 или какой-то другой бит.
[$ ((0xffffffff)) -eq -1] && echo 32 || эхо 64
Что здесь происходит?
Логика очень проста, и все сводится к тому, как компьютеры хранят целые числа со знаком. 32-битная архитектура имеет только 32 бита, которые она может использовать для хранения целых чисел со знаком, в то время как 64-битная архитектура имеет 64 бита! Другими словами, множество целых чисел, которые могут быть сохранены, конечно. Половина этого набора представляет отрицательные числа, а половина представляет положительные числа. Целое число со знаком, равное -1, представляется как наибольшее число, которое может быть сохранено в заданном количестве битов для этой архитектуры. В 32-разрядной системе -1 может быть представлено шестнадцатеричным значением 0xFFFFFFFF (которое составляет 32 двоичных разряда, все равны 1). В 64-битной системе 0xFFFFFFFF преобразуется в 4 294 967 295, основание 10, а 0xFFFFFFFFFFFFFFFF - представление для -1). Вы можете видеть, как это будет легко масштабироваться для систем, которые также являются 8- или 16-битными, что будет равно -1 при 0xFF и 0xFFFF,
uname -m
аuname -m
?