Se você está procurando um simples one-liner, esta é a solução mais confiável que encontrei e que retorna 64 ou 32 . Não importa se você está executando o ARM ou não, e ele deve funcionar em qualquer sistema usando bash ou sh .
Cuidado, isso pressupõe que o sistema seja de 32 ou 64 bits. Veja minha explicação abaixo se precisar detectar arquitetura de 8-16- ou alguns outros bits.
[ $((0xffffffff)) -eq -1 ] && echo 32 || echo 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 tem apenas 32 bits que podem ser usados para armazenar números inteiros assinados, enquanto uma arquitetura de 64 bits tem 64 bits! Em outras palavras, o conjunto de números inteiros que podem ser armazenados é finito. Metade desse 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 é 32 bits binários, todos iguais a 1). Em um sistema de 64 bits, 0xFFFFFFFF é traduzido como 4.294.967.295, base 10, enquanto 0xFFFFFFFFFFFFFFFF é a representação para -1). Você pode ver como isso seria facilmente dimensionado para sistemas de 8 ou 16 bits, o que equivaleria a -1 em 0xFF e 0xFFFF, respectivamente.