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
如果您有一个带有十六进制数字的变量,例如“FF00”,并且您想将其转换为十进制,那么您可以使用bc
:
hex='FF00'
dec=$( printf 'ibase=16; %s\n' "$hex" | bc )
这里,bc
将输出65280
,shell 会将其作为字符串存储在变量 中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