Espansione Bash esadecimale


10

Vorrei sapere se esiste un modo di utilizzare l'espansione bash per visualizzare tutte le possibilità di combinazione per un numero di cifre in esadecimale. Posso espandermi in binari

Nella base 2:

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

Che restituisce:

000 001 010 011 100 101 110 111

In base 10:

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

Che restituisce:

00  01 02...99

Ma in esadecimale:

echo {0..F}

Basta ripetere:

{0..F}

Nota che echo {0-9A-F}funziona in zsh con l' BRACE_CCLopzione.
TonioElGringo,

Si noti che nella base 10 si potrebbe anche dire {00..99}di ottenere lo stesso output.
Ruslan

Risposte:


20

Puoi; devi solo dividere l'intervallo {0..F}in due intervalli separati {0..9}e {A..F}:

$ printf '%s\n' {{0..9},{A..F}}{{0..9},{A..F}}
00
01
...
FE
EF

Questo è un trucco più bello che scrivere manualmente ogni cifra in 0-9A-F!
Dhag,

14

Utilizzando printf:

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

La stringa di formattazione %.2xdice di formattare l'output come un numero esadecimale a due cifre, minuscolo, a riempimento zero ( %02xavrebbe fatto lo stesso).

Se si desidera maiuscole, utilizzare %.2X.

Bash comprende solo intervalli di 10 interi di base o intervalli tra caratteri ASCII in espansioni di parentesi graffe di intervalli.


7

È possibile ma non è carino:

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}

Per quanto ne so bashnon ha idea di intervalli esadecimali.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.