Я плохо знаком с Bash и узнал, что и printf и эхо пишут в стандартный вывод. Но, я проник через следующий пример, который читает выражение из входа и вычисляет результат с точностью 3 десятичных разрядов:
read exp
printf "%.3f\n" "$(echo $exp | bc -l)"
Я не добираюсь, почему эхо передается сюда как аргумент в printf
оператор. Есть ли любой другой способ представить оператор с помощью только echo
?
После read exp
, можно использовать echo
следующим образом:
$ echo "scale=3; $exp/1" | bc
9.456
, Но примечание, которого эта команда не требует echo
:
$ bc <<< "scale=3; $exp/1"
9.456
РЕДАКТИРОВАНИЕ : для получения округленного результата, который необходимо использовать printf
, удар, встроенный как bc
, не может круглые значения.
следующая команда работает как ожидалось:
echo "scale=4; $exp" | bc | xargs printf "%.3f\n"
Вот решение с помощью [только 112]:
, если Вы используете десятичную точку (.
) в Вашем рациональном числе:
$ read exp
123.4567
$ int=${exp%%.*}
$ rat=${exp##*.}
$ echo $int.${rat:0:3}
123.456
, если Вы используете десятичную запятую (,
) в своем рациональном числе (поскольку я использую и большая часть части континентальной Европы):
$ read exp
123,4567
$ int=${exp%%,*}
$ rat=${exp##*,}
$ echo $int,${rat:0:3}
123,456
Для большего количества информации см. Усовершенствованное Руководство по созданию сценариев Bash: Управление Строками .