Якщо ви шукаєте простий однолінійний, це найнадійніше рішення, яке я знайшов, що повертає 64 або 32 . Це не важливо, ви працюєте з ARM чи ні, і він повинен працювати в будь-якій системі, використовуючи bash або sh .
Обережно, це передбачає, що система або 32-розрядна, або 64-бітна. Дивіться моє пояснення нижче, якщо вам потрібно виявити 8- 16- чи якусь іншу бітну архітектуру.
[$ ((0xffffffffff) -eq -1] && відлуння 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
?