Expansión bash hexadecimal

10

Me gustaría saber si hay una manera de usar la expansión bash para ver todas las posibilidades de combinación de varios dígitos en hexadecimal. Puedo ampliar en binarios

En la base 2:

echo {0..1}{0..1}{0..1}

Lo que devuelve:

000 001 010 011 100 101 110 111

En base 10:

echo {0..9}{0..9}

Lo que devuelve:

00  01 02...99

Pero en hexadecimal:

echo {0..F}

Solo repite:

{0..F}
David Borges
fuente
Tenga echo {0-9A-F}en cuenta que funciona en zsh con la BRACE_CCLopción.
TonioElGringo
Tenga en cuenta que en la base 10 también se podría decir {00..99}que obtenga el mismo resultado.
Ruslan

Respuestas:

20

Usted puede; solo necesita dividir el rango {0..F}en dos rangos separados {0..9}y {A..F}:

$ printf '%s\n' {{0..9},{A..F}}{{0..9},{A..F}}
00
01
...
FE
EF
chepner
fuente
¡Este es un truco mejor que escribir manualmente cada dígito en 0-9A-F!
dhag
14

Utilizando printf:

$ printf '%.2x\n' {0..255}

La cadena de formato %.2xdice formatear la salida como un número hexadecimal en minúscula, de dos dígitos, con relleno de cero ( %02xhabría hecho lo mismo).

Si desea mayúsculas, use %.2X.

Bash solo comprende rangos enteros de base 10 o rangos entre caracteres ASCII en expansiones de intervalos entre llaves.

Kusalananda
fuente
7

Es posible pero no es agradable:

echo {0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F}{0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F}

Por lo que puedo decir, bashno tiene noción de rangos hexagonales.

Satō Katsura
fuente