удар
Как отмечалось другими, bash
не поддерживает арифметику с плавающей запятой, хотя вы можете подделать ее с помощью некоторого фиксированного десятичного трюка, например, с двумя десятичными знаками:
echo $(( 100 * 1 / 3 )) | sed 's/..$/.&/'
Вывод:
.33
Смотрите ответ Нильфреда для аналогичного, но более краткого подхода.
альтернативы
Помимо упомянутых bc
и awk
альтернатив есть также следующее:
CLISP
clisp -x '(/ 1.0 3)'
с убранным выходом:
clisp --quiet -x '(/ 1.0 3)'
или через стандартный ввод:
echo '(/ 1.0 3)' | clisp --quiet | tail -n1
Округ Колумбия
echo 2k 1 3 /p | dc
гений кли калькулятор
echo 1/3.0 | genius
Ghostscript
echo 1 3 div = | gs -dNODISPLAY -dQUIET | sed -n '1s/.*>//p'
Gnuplot
echo 'pr 1/3.' | gnuplot
JQ
echo 1/3 | jq -nf /dev/stdin
Или:
jq -n 1/3
КШ
echo 'print $(( 1/3. ))' | ksh
Lua
lua -e 'print(1/3)'
или через стандартный ввод:
echo 'print(1/3)' | lua
максима
echo '1/3,numer;' | maxima
с убранным выходом:
echo '1/3,numer;' | maxima --quiet | sed -En '2s/[^ ]+ [^ ]+ +//p'
узел
echo 1/3 | node -p
октава
echo 1/3 | octave
Perl
echo print 1/3 | perl
python2
echo print 1/3. | python2
python3
echo 'print(1/3)' | python3
р
echo 1/3 | R --no-save
с убранным выходом:
echo 1/3 | R --vanilla --quiet | sed -n '2s/.* //p'
Рубин
echo print 1/3.0 | ruby
Wcalc
echo 1/3 | wcalc
С убранным выходом:
echo 1/3 | wcalc | tr -d ' ' | cut -d= -f2
ЗШ
echo 'print $(( 1/3. ))' | zsh
единицы
units 1/3
С компактным выходом:
units --co 1/3
Другие источники
Стефан Шазелас ответил на аналогичный вопрос в Unix.SX.