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}

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

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.


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.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.