Se você tem uma variável com um número hexadecimal, como 'FF00', e você quer convertê-la em decimal, então você pode usar bc
:
hex='FF00'
dec=$( printf 'ibase=16; %s\n' "$hex" | bc )
Aqui, bc
produzirá 65280
e o shell armazenará como uma string na variável dec
.
Definindo o ibase=16
informa bc
que a base de entrada é 16 (isto é, hexadecimal). Ele também tem uma variável obase
(base de saída) que pode ser usada com ibase
para conversões arbitrárias.
Se você tiver uma matriz de valores hexadecimais:
colors=( $(xtermcontrol --get-bg | sed -n $regex) )
typeset -a base10_colors
for hex in "${colors[@]}"; do
base10_colors+=( "$( printf 'ibase=16; %s\n' "$hex" | bc )" )
done
Ou com essa sintaxe zsh
:
colors=( $(xtermcontrol --get-bg | sed -n $regex) )
typeset -a base10_colors
for hex in "${colors[@]}"; do
base10_colors+=( $((16#$hex)) )
done