LINUX.ORG.RU

shell непойму в чем дело.


0

0

Состряпал на коленке такой вот скриптик, который должен в определенное кол-во символов выводить строку проигрывающейся музыки если это кол-во больше максимального.

b=0
PLAY_W=`mpc|line|grep -v volume|wc -c`
PLAY=`mpc|line grep -v volume`
PLAY_MAX=`mpc|line|grep -v volume|cut -c 1-40`
NUMBER=`expr $PLAY_W - 40`
if [ $NUMBER -le 0 ]; then
echo $PLAY
exit 0
else
for (( i=1; i <= $NUMBER; i++ ))
do
b=`expr $b + 1`
echo $PLAY|cut -c $(( 0 + $b ))-$(( 39 + $b ))
sleep 1
done
fi

Вроде работает, но чуть некорректно c кириллическими буквами, он выводит по две строки, например:

Король И Шут - Воспоми�
�ороль И Шут - Воспомин
ороль И Шут - Воспомин�
�роль И Шут - Воспомина

Как можно полечить?

anonymous

Ответ на: комментарий от anonymous

UTF8? В UTF8 русские буквы представляются двумя байтами, и видимо получается так, что ты режешь одну букву на куски -- один оставляешь, второй отбрасываешь.

anonymous
()

Если UTF-8, то, наверное wc -m. И может вокруг $PLAY поставить двойные кавычки?

P.S. В чем тайный смысл b=`expr $b + 1`, при условии что в следющей строку используется $(( 0 + $b ))

mky ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.