Jeśli szukasz prostego jedno-liniowego, jest to najbardziej niezawodne rozwiązanie, jakie znalazłem, które zwraca 64 lub 32 . Nie ma znaczenia, czy korzystasz z ARM, czy nie, i powinien działać na każdym systemie używającym bash lub sh .
Uwaga, zakłada się, że system jest 32-bitowy lub 64-bitowy. Zobacz moje wyjaśnienie poniżej, jeśli chcesz wykryć architekturę 8-16 lub nieco inną.
[$ ((0xffffffff)) -eq -1] && echo 32 || echo 64
Co tu się dzieje?
Logika jest bardzo prosta i wszystko sprowadza się do sposobu, w jaki komputery przechowują podpisane liczby całkowite. Architektura 32-bitowa ma tylko 32 bity, które może wykorzystać do przechowywania podpisanych liczb całkowitych, podczas gdy architektura 64-bitowa ma 64 bity! Innymi słowy, zbiór liczb całkowitych, które można zapisać, jest skończony. Połowa tego zestawu reprezentuje liczby ujemne, a połowa reprezentuje liczby dodatnie. Liczba całkowita ze znakiem równa -1 jest reprezentowana jako największa liczba, jaką można zapisać w danej liczbie bitów dla tej architektury. W systemie 32-bitowym -1 może być reprezentowane przez wartość szesnastkową 0xFFFFFFFF (która jest 32 bitami binarnymi, wszystkie równe 1). W systemie 64-bitowym 0xFFFFFFFF tłumaczy się na 4 294 967 295, podstawa 10, podczas gdy 0xFFFFFFFFFFFFFFFF jest reprezentacją dla -1). Możesz zobaczyć, jak łatwo to skaluje w przypadku systemów 8- lub 16-bitowych, które będą równe -1 przy 0xFF i 0xFFFF,
uname -m
iuname -m
?