LINUX.ORG.RU

shell printf и utf-8

 , ,


0

2

наблюдается следующая мерзость

(victor@lenovo)~/tmp $> cat t.sh                                                                                                    [sh]
#! /bin/bash

str="несколько слов не латиницей"

echo "$str" | wc -c
echo "$str" | wc -m

printf '"%-55s"\n' "$str"
printf '"%-55ls"\n' "$str"
(victor@lenovo)~/tmp $> ./t.sh                                                                                                      [sh]
52
28
"несколько слов не латиницей    "
"несколько слов не латиницей    "
(victor@lenovo)~/tmp $>                                                                                                             [sh]

т.е. bash-ский printf всегда рассчитывает длину строки побайтно, а не посимвольно. с printf из coreutils - та же фигня.

есть какие-то обходные пути для исправления этого безобразия, или только исходники bash-а пилить?

★★★★★

понятно что сейчас набигут с питонами наперевес, но у меня больше теоретический вопрос - это только в баше так?
а что в других шеллах?
ну, в других, ну ты понел

zolden ★★★★★
()
Ответ на: комментарий от zolden

в zsh все ок, но это не вариант

ananas ★★★★★
() автор топика
Ответ на: кудах от anonymous

про awk уже думал, в боевой ситуации эти строки из отдельного файла вычитываются

ananas ★★★★★
() автор топика
Ответ на: комментарий от ananas

проблема в том, что русский текст берется через gettext. а лишние косьыли, типа самому пробелов добавить, городить не хотелось бы

ananas ★★★★★
() автор топика

есть какие-то обходные пути для исправления этого безобразия, или только исходники bash-а пилить?

KOI8-R

</thread>

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

понятно что сейчас набигут с питонами наперевес

уже «бижал» но споткнулся об этот комент

I-Love-Microsoft ★★★★★
()

Возьми длину строки ${#str}, да накидай нужное количество пробелов.

NeXTSTEP ★★
()
@malvina:~$ echo $str | awk '{printf "%55s\n", $0}'
                            несколько слов не латиницей

Так пойдет? Алсо зачем тебе это вообще надо? Может ты свою задачу неправильно решаешь, давай уж ТЗ в студию, а то заинтриговал, зачем такой бред может понадобиться.

cherry-pick
()

А потом ещё спрашивают, почему люди любят zsh.

% printf '"%-55s"\n' "несколько слов не латиницей" 
"несколько слов не латиницей                            "
Update: а, ТС уже сам выше заметил.

proud_anon ★★★★★
()
Последнее исправление: proud_anon (всего исправлений: 1)
Ответ на: комментарий от cherry-pick

так оно сейчас и сделано. а зачем - формирование меню для dialog. без форматирования уж очень похабно выглядит

ananas ★★★★★
() автор топика
Ответ на: комментарий от cherry-pick

Ты тег "хрюникод" видишь? Какого меня зовешь?

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