1

以下行在我的脚本中不起作用:

a=$(echo "scale=3;(2*$j/(sqrt(3)*$i))" | bc)
a1=$(echo `expr "scale=3; $a^(1/3)"` | bc -l)

它给出的错误:

运行时警告 (func=(main), adr=21): 指数非零刻度

我只想拥有'a'的立方根值。不知何故,我不明白。请给出一些想法。

4

2 回答 2

2

这条线是有问题的:

a1=$(echo `expr "scale=3; $a^(1/3)"` | bc -l)

由于您不能使用非整数值作为bc.

重现此错误的示例:

bc -l
bc 1.06
sqrt(3)^(1/3)
Runtime warning (func=(main), adr=11): non-zero scale in exponent
1

解决方案:

您可以使用此函数计算立方根:

a1=$(bc -l <<< "scale=3; e(l($i)/3)")

例子:

i=8; bc -l <<< "scale=3; e(l($i)/3)"
1.999

awk如@fedorqui 所述使用

于 2014-10-02T09:40:34.463 回答
1

您可能希望使用awk它而不是使用复杂的bc语法:

awk -v num=$bash_variable 'BEGIN{print num^(1/3)}'

例如:

v=3
awk -v num=$v 'BEGIN{print num^(1/3)}'

回报:1.44225

或存储变量以供进一步使用:

var=$(awk -v num=$v 'BEGIN{print num^(1/3)}')
于 2014-10-02T09:44:39.347 回答