Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash expr中的shell浮点数_Bash_Shell - Fatal编程技术网

Bash expr中的shell浮点数

Bash expr中的shell浮点数,bash,shell,Bash,Shell,我正试图从以下内容中获取一个浮点数: totalmark=$(expr $sum / $subjects ) 这是否正确?我认为bash没有浮点功能。您可以尝试: echo "$sum/$subjects" | bc -l Bash不支持浮点运算。试试看 顺便说一下,有三个答案说Bash不支持浮点运算。虽然这是真的,expr是一个外部程序(/usr/bin/expr对我来说),尤其是在这种情况下,它不支持浮动。bash不支持浮动,请使用awk或bc/dc 例如awk totalmark=$(

我正试图从以下内容中获取一个浮点数:

totalmark=$(expr $sum / $subjects )

这是否正确?

我认为bash没有浮点功能。您可以尝试:

echo "$sum/$subjects" | bc -l

Bash不支持浮点运算。试试看


顺便说一下,有三个答案说Bash不支持浮点运算。虽然这是真的,
expr
是一个外部程序(
/usr/bin/expr
对我来说),尤其是在这种情况下,它不支持浮动。

bash不支持浮动,请使用awk或bc/dc

例如awk

totalmark=$(awk 'BEGIN{print $sum / $subjects}')
或公元前

如果您有权使用bash以外的其他shell,请尝试zsh或ksh

$ zsh -c 'echo $((4/1.3))'
3.0769230769230766

$ ksh -c 'echo $((4/1.3))'
3.07692307692307692

默认情况下,GNU
bc
具有
scale=0
,这可能是Q不想要的。传递
-lq
选项。@查尔斯:这就是为什么我指定了4的刻度。它可以是你想要的任何东西。
--mathlib
选项(
-l
)提供默认值
比例=20
(至少在我的bc 1.06.94系统上是这样)。不过,
--quiet
选项是个好主意。对不起,我没有注意到你在输入中通过了作业-我一定是在做白日梦
scale=20
是无情的过度杀伤力,但是想要的信息在那里,我倾向于选择输出中的噪声而不是shell脚本中的噪声。@ghostdog:Fair point,但是谁在他们的客户端上安装了php?事实上,我确实看到它默认安装在Mac OS上;我相信苹果有它的理由…@ghostdog:因为我不管怎么说都离题了。。。在我看来,在不太多年以前,perl-eOneLiner是大多数人做这些事情的方式。Perl在这些日子里似乎有些黯然失色。谢谢你的zsh回答!出于某种原因,我不知道如何做到这一点。awk和bc哪个更好更快?@NabiK.A.Z.,在这两种情况下,绝大多数时间都花在启动工具上——运行它所需的时间相对较少——而大部分启动时间(fork、exec、linker/loader)都涉及到任何外部工具,因此,我并不期望有显著的差异(尽管您是否会在实践中看到差异取决于您的操作系统附带的awk和bc的具体实现,它们链接到哪些库,等等——因此如果您真的需要答案,您希望进行基准测试)。
totalmark=$(echo "scale=2;$sum/$subjects"|bc)
$ zsh -c 'echo $((4/1.3))'
3.0769230769230766

$ ksh -c 'echo $((4/1.3))'
3.07692307692307692