Expansion bash hexadécimale

10

Je voudrais savoir s'il existe un moyen d'utiliser l'expansion bash pour afficher toutes les possibilités de combinaison pour un certain nombre de chiffres en hexadécimal. Je peux développer des binaires

En base 2:

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

Ce qui redonne:

000 001 010 011 100 101 110 111

En base 10:

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

Ce qui redonne:

00  01 02...99

Mais en hexadécimal:

echo {0..F}

Répétez simplement:

{0..F}
David Borges
la source
Notez que cela echo {0-9A-F}fonctionne dans zsh avec l' BRACE_CCLoption.
TonioElGringo
Notez qu'en base 10, vous pourriez également dire {00..99}d'obtenir la même sortie.
Ruslan

Réponses:

20

Vous pouvez; il vous suffit de diviser la plage {0..F}en deux plages distinctes {0..9}et {A..F}:

$ printf '%s\n' {{0..9},{A..F}}{{0..9},{A..F}}
00
01
...
FE
EF
chepner
la source
C'est une astuce plus agréable que d'écrire manuellement chaque chiffre dans 0-9A-F!
dhag
14

En utilisant printf:

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

La chaîne de formatage %.2xindique de formater la sortie sous la forme d'un nombre hexadécimal à deux chiffres, minuscule et rempli de zéro (%02x aurait fait la même chose).

Si vous voulez des majuscules, utilisez %.2X.

Bash ne comprend que les plages entières de base 10 ou les plages entre les caractères ASCII dans les extensions d'accolade des intervalles.

Kusalananda
la source
7

C'est possible mais ce n'est pas bien:

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}

Autant que je sache, bashn'a aucune notion de plages hexadécimales.

Satō Katsura
la source