带函数的浮点算术

时间:2018-04-28 03:20:00

标签: bash function math floating-point sh

这些函数的作用是卷曲json文件并解析它,其输出是一个数字。

function func() {
curl -Ss -H 'Cache-Control: no-cache' url.com/A?limit=2 | jq -r '. 
[] | .[] | .blah'
}
function func2() {
curl -Ss -H 'Cache-Control: no-cache' url.com/B2?limit=2 | jq -r '. 
[] | .[] | .blah'
}
function func3() {
curl -Ss -H 'Cache-Control: no-cache' url.com/C3?limit=2 | jq -r '. 
[] | .[] | .blah'
} 

function example() { 
"(($(func) * $(func2) * $(func3)))" | bc -l
}
#result is it echoing the numbers, but not actually doing the math.
#echoing .072*.027 in bc, but no math.

所以我试图做的是通过bash进行浮点运算,这将通过另一个函数引用。唯一的区别是这是功能。 Bash不支持通过bc求解的浮点运算。

示例函数数字输出:

#func output
0.072854 #A
0.072855 #B
0.072828 #C
0.072827 #D

#func2 output
0.027873 #A
0.027884 #B
0.027848 #C
0.027847 #D

#func3 output
0.383170 #A
0.383215 #B
0.381858 #C
0.381857 #D

工作原理,A * A * A =输出1,B * B * B =输出2,C * C * C =输出3

我尝试过的事情:

function blah() {
echo $((func*func2*func3)) | bc -l
}
#result is "0"

echo "$(func) * $(func2) * $(func3)" | bc -l
#result is:
.072965
.072966
.072925
.002030350008
.027856
.027827
.010633768950
.382371
.380995
.380977

1 个答案:

答案 0 :(得分:1)

我相信你会希望你的功能如下:

echo "$(func) * $(func2) * $(func3)" | bc -l

编辑:由于您有多个输出值,您可以将它们放入数组中,然后遍历它们并乘以值:

example() {
  a=($(func1))
  b=($(func2))
  c=($(func3))

  for i in {0..3} # set to number of values returned
    do 
      echo "${a[i]} * ${b[i]} * ${c[i]}" | bc -l
    done
}

根据您的值,输出应为:

.000778087816708140
.000778496988156300
.000774451610799552
.000774411139231933

如果您的func返回一个值,那么使用带有echo的{​​{1}}就足够了。