LINUX.ORG.RU

[mksh][надули] Обрезание не умеет что ли?


0

1
printf "%.3f\n" "23.5469"
printf: %.3f: invalid directive

Округление не работает. По всем shell'ам пробежался - они умеют. Баг или чего? Урезали бздуны shell, циклы в стиле СИ не умеет. Да и нужно ли оно?



Последнее исправление: Gordy (всего исправлений: 2)

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

> В bash УМВР.
И у меня УМВР. А в mksh - нет.

Не выпендривайся

Хочется же)

Gordy
() автор топика

порошок уходи

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

> Набор слов какой-то. Что ты имел ввиду?

То что mksh чистый POSIX-shell. И он не использует всякие левые выдумки как в tcsh'е, zsh,е и bash'е. Писать на нём переносимые между системами скрипты правильно. Если ты будешь писать на нём скрипты тебя будут уважать. Ты будешь в почёте у линуксоизов и беэздешников. Короче, молодцом будешь.

Othniel
()
Ответ на: комментарий от Gordy

Он работает, просто не округляет.

@madoka~>/usr/bin/printf "%.3f\n" "23.5469" 
23.547
@madoka~>equery b /usr/bin/printf
 * Searching for /usr/bin/printf ...
sys-apps/coreutils-8.13 (/usr/bin/printf)
x3al ★★★★★
()
Ответ на: комментарий от Gordy

Дубина, в awk собственный оператор printf.

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

Дистрибутивоспецифичная тулза для того, чтобы показать, что printf — из обычных, скучных coreutils (а не из принципиально нового heirloom toolchest, например. Тоже округляет).

x3al ★★★★★
()
printf "%.3s\n" "8====D"

Оборезание =) Или вот так:

echo "8####D" | sed 's/\#/=/g'
Снятие крайней плоти)))

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

И да, чтобы не ввести тебя в заблуждение: mksh тоже имеет свои вещи, типа неограниченных массивов и так далее. Если ты будешь их использовать твои скрипты будут несовместимы со скриптами на чистом shell'е. Для того чтобы совсем хорошо было используй http://ru.wikipedia.org/wiki/Ash_(UNIX) Или проверяй всё что напишешь им. Если скрипт запустился в ash, значит он полностью posix-совместимый, а ты крутой скриптописатель.

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

Пробовал, там отказывается включаться режим редактирования строки, хотя бы в стиле vi. Может подскажешь, как править?

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

>Пробовал, там отказывается включаться режим редактирования строки, хотя бы в стиле vi. Может подскажешь, как править?

coolface.jpg Его там нет :)



ЕМНИП.

Othniel
()
Ответ на: комментарий от Gordy

>А че там есть?

ash пригоден только для написания скриптов. Для интерактивной работы я использую tcsh. В ash'е редактирования командной строки не предусмотрено.

Othniel
()
Ответ на: комментарий от Gordy

Тот же синтаксис. Но в новом dash сломали юникод в builtins, и по-моему ещё не починили. Проверяется банальным echo длиннаяюникоднаястрока|read i; echo $i.

Хотя пока этот новый dash доберётся до дебиана, он ещё на пару мажорных версий новее станет.

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

>В Debian есть dash. Только там синтаксис другой, скрипты написанные на bash не подойдут.

Скрипты написанные на bash не заработают в sh. А скрипты написанные на sh заработают и в ash, и в mksh, и в dash. Кстати dash имеет свои проблемы. Подробности в русской Википедии.

Othniel
()
Ответ на: комментарий от Gordy

Посмотри, куда по умолчанию указывает sh в каждом дистрибутиве. Варианты ответа для ленивых:

— bash — zsh — dash (debian) — busybox.

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

Тему давно и неоднократно раскрыли. А я о том, что sh (aka Bourne Shell, не путать с Bourne Again Shell) не существует в современных дистрибутивах.

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

>ну и нахер это ash нужен? Стоит же sh по-умолчанию в каждом дистрибутиве.

Понимаешь ли... Обычно /bin/sh - это жёсткая или символическая ссылка на bash или dash. А csh на tcsh. В идеале оболочка, в зависимости от того под каким именем её вызывают, должна ограничивать свои функции в соответствии со стандартами POSIX. А на практике никто не знает, действительно это так, и как поведёт себя та или иная команда. Чтобы не вылазить за пределы POSIX и не использовать того, что может оказаться неработоспособным в других оболочках используют идеальный ash, скрипты совместимые с ним заработают в любой POSIX-совместимой оболочке с гарантией 99,99%. Как-то так.

Othniel
()
Ответ на: комментарий от Gordy
@madoka~>mksh
zsh: correct 'mksh' to 'most' [nyae]? n
$ printf "%.3f\n" "23.5469"
23.547
$ eix -e mksh|grep Install
     Installed versions:  40b(01:32:33 06.10.2011)

Выкинь свой дебиан.

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

Если уверен в этом — проверь параметры сборки и оформи баг. У меня всё работает, версия и дистрибутив указаны.

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