16進配列を基本10の整数配列に変換するには?

16進配列を基本10の整数配列に変換するには?
    local regex="s/rgb:\([^/]\+\)\/\([^/]\+\)\/\([^/]\+\)/\1 \2 \3/p"
    local colors=$(xtermcontrol --get-bg | sed -n $regex)
    local base10_colors=()
    for i in 1 2 3; do
        $base10_colors[i]=$((16#$colors[i]))
    done

今持っていますが、うまくいきません。

答え1

16進変数があり、「FF00」と言ってそれを10進数に変換するには、次のようにしますbc

hex='FF00'
dec=$( printf 'ibase=16; %s\n' "$hex" | bc )

ここでbc出力は出力され、65280シェルはそれを変数に文字列として格納しますdec

設定は、入力基数が16(つまり16進数)であることをibase=16示します。また、任意の変換に使用できる変数(出力ベース)bcもあります。obaseibase

16進値の配列がある場合:

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

関連情報