有没有更快的方法在命令行中计算以下内容:
echo "4 * 5" | bc
答案1
我想添加一个解决方案Z壳,不幸的是我几乎一无所知鱼,这样我就可以将其改编为鱼类语法。抱歉!
我定义一个函数c
:
function c { echo $@ | bc }
并且我为 设置了一个别名c
,这样就不会发生文件通配符(并且我可以省略表达式周围的引号,尤其是包括星号的引号:
alias c="noglob c"
然后我可以做这样的计算:
$ c 4*5
20
$ c 1.5*2^8
384.0
ENTER
这比实际要计算的表达式多3 次击键(包括最后的)。可以改进...也许使用键绑定。
答案2
POSIX 兼容 Shell(dash
ksh
bash
zsh
还有很多)
有一个内置方法可以实现这一点。使用$(())
构造函数来实现它:
echo $((4 * 5))
它不调用任何函数,因此速度更快。
让我们比较一下以下几种方式(zsh
):
$ time ( echo "4 * 5" | bc )
20
( echo "4 * 5" | bc; ) 0.00s user 0.00s system 61% cpu 0.007 total
$ time ( echo $((4 * 5)) )
20
( echo $((4 * 5)); ) 0.00s user 0.00s system 48% cpu 0.001 total
但是,$(())
有很多限制并且只能进行基本的算术运算。
C 壳(csh
tcsh
)
我不认为有一个单一的解决方案C 壳s. 但是,可以执行以下操作:
@ i = 4 * 5 ; printf "$i\n"
鱼
可能,math "4 * 5"
效果更快。
答案3
比更好的答案(在这种情况下)更通用的$(( ))
答案是使用<<<
例如bc <<< "4 * 5"
这里我们不需要使用echo
,只需将参数发送到标准输入。