Se você está procurando uma linha única, esta é a solução mais confiável que eu descobri que retorna 64 ou 32 . Não importa se você está executando o ARM ou não, e deve funcionar em qualquer sistema usando o bash ou sh .
Cuidado, isso pressupõe que o sistema seja de 32 ou 64 bits. Veja minha explicação abaixo se você precisar detectar a arquitetura 8-16 ou algum outro bit.
[$ ((0xffffffff)) -eq -1] && eco 32 || eco 64
O que está acontecendo aqui?
A lógica é muito simples e tudo se resume a como os computadores armazenam números inteiros assinados. Uma arquitetura de 32 bits possui apenas 32 bits que pode ser usada para armazenar números inteiros assinados, enquanto uma arquitetura de 64 bits possui 64 bits! Em outras palavras, o conjunto de números inteiros que podem ser armazenados é finito. Metade deste conjunto representa números negativos e metade representa números positivos. O número inteiro assinado igual a -1 é representado como o maior número que pode ser armazenado em um determinado número de bits para essa arquitetura. Em um sistema de 32 bits, -1 pode ser representado pelo valor hexadecimal 0xFFFFFFFF (que é de 32 bits binários, todos iguais a 1). Em um sistema de 64 bits, 0xFFFFFFFF traduz para 4.294.967.295, base 10, enquanto 0xFFFFFFFFFFFFFFFFFF é a representação para -1). Você pode ver como isso seria facilmente dimensionado para sistemas de 8 ou 16 bits, que seriam iguais a -1 em 0xFF e 0xFFFF,
uname -m
euname -m
?