【问题标题】:Bash calculatorBash 计算器
【发布时间】:2014-11-27 06:46:39
【问题描述】:

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

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' 的立方根的值。不知何故,我不明白。请给点意见。

【问题讨论】:

    标签: bash shell unix bc bash4


    【解决方案1】:

    这行有问题:

    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
    

    或者使用@fedorqui 提到的awk

    【讨论】:

    • 你能用log(a)除以3然后antilog()
    【解决方案2】:

    您可能希望为此使用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)}')
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-09-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-18
      • 2018-01-28
      • 2010-10-16
      相关资源
      最近更新 更多