代码之家  ›  专栏  ›  技术社区  ›  Caucasian Malaysian

如何将函数输出转换为数字[重复]

  •  0
  • Caucasian Malaysian  · 技术社区  · 6 年前

    所以我们要转动这个函数,它的输出是一个数字。数字是通过一些不相关的json文件卷曲的。

    #error input 1
    if (($(masterfunc) >= 1)); then
    #I've also tried
    #error input 2
    if (($(masterfunc | bc -l) >= 1)); then
    

    我得到这个错误,我假设是因为它将它输出为字母或命令,而不是数字。

    #error output 1
    ((: 1.00048333447157914468 >= 1: syntax error: invalid arithmetic 
    operator (error token is ".00048333447157914468 >= 1")
    #error output 2
    ((: .99989817794934530799 >= 1: syntax error: operand expected (error 
    token is ".99989817794934530799 >= 1")
    

    我假设这是一个浮点算术问题,但它应该通过bc来解决?

    我是bash新手,如果问题是一些不相关的语法错误,我道歉。

    2 回复  |  直到 6 年前
        1
  •  2
  •   Gordon Davisson    6 年前

    这实际上相当复杂。shell根本不懂实数,因此您必须获取其他内容(如 bc )进行比较并输出bash能够理解的更简单的内容。我认为最简单的方法是:

    if [ $(echo "$(masterfunc) >= 1" | bc) -eq 1 ]; then
    

    逐步解释:

    • echo "$(masterfunc) >= 1" 运行 masterfunc 函数,将“>=1”添加到其输出,并将结果(类似于“1.00048333447157914468>=1”)发送到标准输出。

    • echo "$(masterfunc) >= 1" | bc 运行上述内容并将其输送到 卑诗省 ,如果 masterfunc公司 输出大于或等于1,如果小于,则为“0”。注意:您可以试着手动运行这个程序,看看它是如何工作的。

      这个“1”/“0”输出更符合bash的理解,但我们仍然需要告诉bash如何利用它。

    • [ $(echo "$(masterfunc) >= 1" | bc) -eq 1 ] 运行上述命令,捕获其输出 $( ) ,并将其嵌入到测试表达式中。基本上,取决于 卑诗省 ,这相当于 [ 1 -eq 1 ] [ 0 -eq 1 ]

        2
  •  0
  •   gniourf_gniourf    6 年前

    使用此选项:

    if (( $(printf '%s >= 1\n' "$(masterfunc)" | bc -l) )); then ...