Как получить число символов в Unicode строке в bash?

Строка содержит кириллицу и английские буквы. Как в bash-скрипте получить число букв?

Например:
TEST="йцукенasdf"
Нужно получить 10.

Пробовал:
CHRLEN=$(wc -m <<< $TEST)
printf "%s has %d characters\n" "$TEST" "$CHRLEN"

Почему-то показывает 11, на 1 больше, чем правда.

CHRLEN=${#TEST}
возвращает 16 – кириллицу считает один за два.
  • Вопрос задан
  • 1125 просмотров
Решения вопроса 1
xotkot
@xotkot
хорошо есть и хорошо весьма
Почему-то показывает 11, на 1 больше, чем правда.

оно считает еще перенос строки как символ

возвращает 16 – кириллицу считает один за два.

добавьте тогда просто нужную кодировку перед командой, например:
LANG=ru_RU.UTF-8 CHRLEN=$(echo -n $TEST | wc -m)
или
LANG=ru_RU.UTF-8 echo ${#TEST}
из приведённых выше примеров
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
saboteur_kiev
@saboteur_kiev Куратор тега Linux
software engineer
$ TEST="йцукенasdf"
$ echo ${#TEST}
10
Ответ написан
<<< добавляет в конец символ перевода строки.

CHRLEN=$(echo -n $TEST | wc -m)
printf "%s has %d characters\n" "$TEST" "$CHRLEN"
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы