Nếu bạn đang tìm kiếm một lớp lót đơn giản, đây là giải pháp đáng tin cậy nhất mà tôi đã tìm thấy trả về 64 hoặc 32 . Không quan tâm bạn có chạy ARM hay không và nó sẽ hoạt động trên mọi hệ thống sử dụng bash hoặc sh .
Coi chừng, điều này sẽ cho rằng hệ thống là 32 bit hoặc 64 bit. Xem giải thích của tôi dưới đây nếu bạn cần phát hiện kiến trúc 8- 16- hoặc một số bit khác.
[$ ((0xffffffff)) -eq -1] && echo 32 || tiếng vang 64
Cái gì ở đây?
Logic rất đơn giản và tất cả tập trung vào cách máy tính lưu trữ các số nguyên đã ký. Kiến trúc 32 bit chỉ có 32 bit mà nó có thể sử dụng để lưu trữ các số nguyên đã ký trong khi kiến trúc 64 bit có 64 bit! Nói cách khác, tập hợp các số nguyên có thể được lưu trữ là hữu hạn. Một nửa bộ này đại diện cho số âm và một nửa đại diện cho số dương. Số nguyên đã ký bằng -1 được biểu diễn dưới dạng số lớn nhất có thể được lưu trữ trong một số bit nhất định cho kiến trúc đó. Trên hệ thống 32 bit, -1 có thể được biểu thị bằng giá trị hex 0xFFFFFFFF (là 32 bit nhị phân, tất cả đều bằng 1). Trên hệ thống 64 bit, 0xFFFFFFFF chuyển thành 4.294.967.295, cơ sở 10 trong khi 0xFFFFFFFFFFFFFFFF là đại diện cho -1). Bạn có thể thấy cách điều này sẽ dễ dàng chia tỷ lệ cho các hệ thống 8- hoặc 16 bit cũng bằng -1 tại 0xFF và 0xFFFF,
uname -m
vàuname -m
?