Jika Anda mencari satu-liner sederhana, ini adalah solusi paling andal yang saya temukan yang mengembalikan 64 atau 32 . Tidak peduli apakah Anda menjalankan ARM atau tidak, dan itu harus bekerja pada sistem apa pun menggunakan bash atau sh .
Hati-hati, ini akan menganggap sistem 32-bit atau 64-bit. Lihat penjelasan saya di bawah ini jika Anda perlu mendeteksi arsitektur 8- 16- atau beberapa bit lainnya.
[$ ((0xffffffff)) -eq -1] && echo 32 || gema 64
Apa yang terjadi di sini?
Logikanya sangat sederhana dan semuanya bermuara pada bagaimana komputer menyimpan bilangan bulat yang ditandatangani. Arsitektur 32-bit hanya memiliki 32 bit yang dapat digunakan untuk menyimpan bilangan bulat yang ditandatangani sementara arsitektur 64-bit memiliki 64 bit! Dengan kata lain, himpunan bilangan bulat yang dapat disimpan terbatas. Setengah dari himpunan ini mewakili angka negatif dan setengah mewakili angka positif. Bilangan bulat bertanda sama dengan -1 direpresentasikan sebagai angka terbesar yang dapat disimpan dalam jumlah bit tertentu untuk arsitektur itu. Pada sistem 32-bit, -1 dapat diwakili oleh nilai hex 0xFFFFFFFF (yang merupakan 32 bit biner, semua sama dengan 1). Pada sistem 64-bit, 0xFFFFFFFF diterjemahkan menjadi 4.294.967.295, basis 10 sedangkan 0xFFFFFFFFFFFFFFFF adalah representasi untuk -1). Anda dapat melihat bagaimana ini akan dengan mudah skala untuk sistem yang 8- atau 16-bit juga yang akan sama dengan -1 pada 0xFF dan 0xFFFF,
uname -m
danuname -m
?