Если у вас есть переменная с шестнадцатеричным числом, например 'FF00', и вы хотите преобразовать его в десятичное, то вы можете использовать bc
:
hex='FF00'
dec=$( printf 'ibase=16; %s\n' "$hex" | bc )
Здесь bc
выведет 65280
, и оболочка сохранит его как строку в переменной dec
.
Установка ibase=16
сообщает bc
, что входное основание равно 16 (т.е. шестнадцатеричное). Она также имеет переменную obase
(выходное основание), которую можно использовать вместе с ibase
для произвольных преобразований.
Если у вас есть массив шестнадцатеричных значений:
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
Или, с помощью синтаксиса zsh
:
colors=( $(xtermcontrol --get-bg | sed -n $regex) )
typeset -a base10_colors
for hex in "${colors[@]}"; do
base10_colors+=( $((16#$hex)) )
done