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