Здравствуйте! Не справился с формулированием вопроса в гугле, поэтому надеюсь что тут смогут или формулировку подсказать, или же сразу ответить по сабжу, заранее извиняюсь за тривиальность вопроса. Итак! Решил я в правом промте zsh вывести заряд аккумулятора ноутбука. И посмотрев на унылую белую надпись понял, что надо бы её раскрасить. Общий вид функции принимает примерно следующий вид (фрагмент из .zshrc):
for color in red green yellow blue magenta cyan black white; do
eval $color='%{$fg_no_bold[${color}]%}'
#eval ${color}_bold='%{$fg_bold[${color}]%}'
done
reset="%{$reset_color%}"
#Индикатор заряда в правом промте
#
function getChargeLevel(){
batteryStatus=$(acpi -b | awk "{print $1}" | sed 's/\([^:]*\): \([^,]*\), \([0-9]*\)%.*/\2/')
batteryChargeLevel=$(acpi -b | awk "{print $1}" | sed 's/\([^:]*\): \([^,]*\), \([0-9]*\)%.*/\3/')
if [[ ${batteryChargeLevel} > 90 ]] ; then
colorBatteryStatus=${green}
fi
if [[ ${batteryChargeLevel} > 40 && ${batteryChargeLevel} < 90 ]] ; then
colorBatteryStatus=${yellow}
fi
if [[ ${batteryChargeLevel} < 40 ]] ; then
colorBatteryStatus=${red}
fi
if [[ ${batteryChargeLevel} == 100 ]] ; then
colorBatteryStatus=${blue}
fi
echo "${colorBatteryStatus}Battery : ${batteryChargeLevel} , ${batteryStatus}" # right prompt with time
}
setopt prompt_subst
RPROMPT='${cyan}[$(getChargeLevel)${cyan}]'
И все бы ничего, НО! Если убрать из скрипта эту часть :
if [[ ${batteryChargeLevel} == 100 ]] ; then
colorBatteryStatus=${blue}
fi
То скрипт окрашивает правый промт в красный! Однако ситуация становится еще интереснее, когда заряд ниже 100 - в этом случае все работает как положено, то есть от 99 до 90 - зеленая окраска, ниже - желтая.
Начал грешить на то, что регулярка при 100% цепляет какой-нибудь пробел или еще чего - нет же! Выполнил в шелле:
$batteryChargeLevel=$(acpi -b | awk "{print $1}" | sed 's/\([^:]*\): \([^,]*\), \([0-9]*\)%.*/\3/')
$echo a${batteryChargeLevel}a
$a100a
Так же выполнил 2 условия - результаты привели меня в замешательство:
┌┌(ukio@ukio)-(10:02-:-06/12)┌-¨-¨¨˙
└┌(~)┌¨˙if [[ ${batteryChargeLevel} == 100 ]] ; then
echo "a"
else
echo "b"
fi
a
┌┌(ukio@ukio)-(10:06-:-06/12)┌-¨-¨¨˙
└┌(~)┌¨˙if [[ ${batteryChargeLevel} > 70 ]] ; then
echo "a"
else
echo "b"
fi
b
Шелл перезапускал. Неужели 100 меньше чем 70? Быть ведь такого не может, особенно когда 99 больше 70 (по крайней мере по мнению интерпретатора). Огромная благодарность и плюс к карме всем небезразличным.