Що було б найближчим до портативного способу отримати ширину відображення (принаймні, на терміналі (такий, який відображає символи в поточній локалі з правильною шириною)) рядка символів із сценарію оболонки.
Мене насамперед цікавить ширина символів без контролю, але також вітаються рішення, що враховують символи управління, такі як зворотний простір, повернення каретки, горизонтальна таблиця.
Іншими словами, я шукаю API оболонки навколоwcswidth()
POSIX.
Ця команда повинна повернути:
$ that-command 'unix' # 4 fullwidth characters
8
$ that-command 'Stéphane' # 9 characters, one of which zero-width
8
$ that-command 'もで 諤奯ゞ' # 5 double-width Japanese characters and a space
11
Можна використати ksh93
's, printf '%<n>Ls'
яка враховує ширину символів для вкладки в <n>
стовпці, або col
команду (наприклад, printf '++%s\b\b--\n' <character> | col -b
для того, щоб спробувати це зробити, є текст :: CharWidthperl
принаймні є модуль , але є більш прямі або портативні підходи.
Це більш-менш подальше запитання щодо іншого питання, яке стосувалося відображення тексту в правій частині екрана, для якого вам потрібно мати цю інформацію, перш ніж відображати текст.