Expansão Bash hexadecimal

10

Gostaria de saber se existe uma maneira de usar a expansão do bash para visualizar todas as possibilidades de combinação de vários dígitos em hexadecimal. Eu posso expandir em binários

Na base 2:

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

O que devolve:

000 001 010 011 100 101 110 111

Na base 10:

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

O que devolve:

00  01 02...99

Mas em hexadecimal:

echo {0..F}

Apenas repita:

{0..F}
David Borges
fonte
Observe que echo {0-9A-F}funciona no zsh com a BRACE_CCLopção
TonioElGringo
Observe que na base 10 você também pode dizer {00..99}para obter a mesma saída.
Ruslan

Respostas:

20

Você pode; você só precisa dividir o intervalo {0..F}em dois intervalos separados {0..9}e {A..F}:

$ printf '%s\n' {{0..9},{A..F}}{{0..9},{A..F}}
00
01
...
FE
EF
chepner
fonte
Esse é um truque melhor do que escrever manualmente cada dígito em 0-9A-F!
dhag
14

Usando printf:

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

A string format %.2xdiz para formatar a saída como um número hexadecimal com dois dígitos, minúsculas e minúsculas ( %02xfaria o mesmo).

Se você quiser maiúsculas, use %.2X.

O Bash entende apenas intervalos inteiros da base 10 ou intervalos entre caracteres ASCII em expansões de intervalo entre chaves.

Kusalananda
fonte
7

É possível, mas não é legal:

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}

Tanto quanto eu posso dizer bashnão tem noção de intervalos hexadecimais.

Satō Katsura
fonte