2012-03-26 5 views
4

Мне нужна функция bash для подсчета ширины строки, которая будет отображаться при отображении. , потому что в моих случаях строка может содержать некоторые широкоформатные (например, китайские). Поэтому я не могу просто использовать длину строки.в bash script, howto получить ширину отображения строки

function getDisplayWidth() 
{ 
    ??? 
} 

Тогда "а" вернет 3 и "前后" должны вернуть 4 вместо 2.

ответ

4

Если реализация wc имеет возможность -L, что, как представляется, рассчитывать право «вещь». (Coreutils имеет его, не уверен, что если какой-либо другой делать.)

Ex:

$ getw() { wc -L <<< "$1"; } 
$ getw 前后 
4 
$ getw 前a后c 
6 
$ getw abc前后 
7 
$ getw "行书/行書" 
11 
+0

'wc -L <<<« $ 1 »' –

+0

@ IgnacioVazquez-Abrams: да, спасибо. – Mat

+0

@Mat: Спасибо, функция одной линии фантастическая! – Nybble

0

Попробуйте wc -m. На странице os x man:

Количество символов в каждом входном файле записывается в стандартный вывод . Если текущий язык не поддерживает многобайтовые символы, это эквивалентно опции -c. Это приведет к отмене любого из предшествующих использования опции -c.

+0

'туалет -m' даст 2 с его образцом китайского текста - есть только два символов. – Mat

+0

Упс, прочитайте вопрос назад. Сожалею! – phs