Si está buscando una línea simple, esta es la solución más confiable que he encontrado que devuelve 64 o 32 . No le importa si está ejecutando ARM o no, y debería funcionar en cualquier sistema que use bash o sh .
Cuidado, esto supondrá que el sistema es de 32 bits o de 64 bits. Vea mi explicación a continuación si necesita detectar una arquitectura de 8-16 o algún otro tipo de arquitectura.
[$ ((0xffffffff)) -eq -1] && echo 32 || echo 64
¿Qué pasa aquí?
La lógica es muy simple y todo se reduce a cómo las computadoras almacenan enteros firmados. ¡Una arquitectura de 32 bits solo tiene 32 bits que puede usar para almacenar enteros con signo, mientras que una arquitectura de 64 bits tiene 64 bits! En otras palabras, el conjunto de enteros que se pueden almacenar es finito. La mitad de este conjunto representa números negativos y la otra mitad representa números positivos. El entero con signo igual a -1 se representa como el número más grande que se puede almacenar en un número dado de bits para esa arquitectura. En un sistema de 32 bits, -1 puede representarse por el valor hexadecimal 0xFFFFFFFF (que es 32 bits binarios, todos iguales a 1). En un sistema de 64 bits, 0xFFFFFFFF se traduce en 4,294,967,295, base 10, mientras que 0xFFFFFFFFFFFFFFFF es la representación de -1). Puede ver cómo esto se escalaría fácilmente para sistemas de 8 o 16 bits que serían iguales a -1 en 0xFF y 0xFFFF,
uname -m
yuname -m
?