重击
正如其他人所指出的,bash 不支持浮点运算,尽管您可以使用一些固定的十进制技巧来伪造它,例如两位小数:
echo $(( 100 * 1 / 3 )) | sed -e 's/..$/.&/;t' -e 's/.$/.0&/'
输出:
.33
请参阅Nilfred's answer 了解类似但更简洁的方法。
替代方案
除了提到的bc 和awk 替代方案之外,还有以下替代方案:
剪辑
clisp -x '(/ 1.0 3)'
清理后的输出:
clisp --quiet -x '(/ 1.0 3)'
或通过stdin:
echo '(/ 1.0 3)' | clisp --quiet | tail -n1
直流
echo 2k 1 3 /p | dc
天才cli计算器
echo 1/3.0 | genius
鬼脚本
echo 1 3 div = | gs -dNODISPLAY -dQUIET | sed -n '1s/.*>//p'
gnuplot
echo 'pr 1/3.' | gnuplot
Imagemagick
convert xc: -format '%[fx:1/3]' info:
或通过stdin:
echo 1/3 | { convert xc: -format "%[fx:$(cat)]" info:; }
jq
jq -n 1/3
或通过stdin:
echo 1/3 | jq -nf /dev/stdin
ksh
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
R
echo 1/3 | R --no-save
清理后的输出:
echo 1/3 | R --vanilla --quiet | sed -n '2s/.* //p'
红宝石
echo puts 1/3.0 | ruby
单位
units 1/3
紧凑的输出:
units --com 1/3
wcalc
echo 1/3 | wcalc
清理后的输出:
echo 1/3 | wcalc | tr -d ' ' | cut -d= -f2
zsh
print $(( 1/3. ))
或通过stdin:
echo 'print $(( 1/3. ))' | zsh
其他来源
Stéphane Chazelasanswered a similar question 在 UL 上。