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
もあります。obase
ibase
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