bash: bc 命令对 * 的评估

标签 bash unix bc

我在 UNIX 中使用 bc 命令来解析一些数学表达式。我有两个小功能:

function bashcalc {
      echo $@ | bc -l
}

function2 {
      ...
      catMinusMouse=$(bashcalc "$cat_angle - $mouse_angle")
      cos=$(cosine $catMinusMouse)
      val=$(bashcalc "$cat_radius * $cos")   ##PARSE ERROR
      ...
}

当我尝试在 val 之后运行表达式时,我得到了很多“(standard_in) 1: parse error”。

我的第一个想法是星号是问题所在,所以我尝试将其转义。然而,这给了我一个非法字符错误。

解决方案最终是删除所有的空格

   val=$(bashcalc "$cat_radius*$cos")

问题:为什么计算 catMinusMouse(减法运算符周围有空格)有效,而相同格式的乘法却无效?

最佳答案

您需要转义* 或将其括在“引号”中

3 种变体:

#!/bin/bash

function bashcalc {
    echo "$@" | bc -l
}

function2() {
    cat_radius=0.9
    catMinusMouse=0.4

    val=$(bashcalc "$cat_radius" "*" "c($catMinusMouse)")
    echo $val

    #or
    val=$(bashcalc "$cat_radius * c($catMinusMouse)")
    echo $val

    #or
    val=$(bc -l <<EOF
$cat_radius * c($catMinusMouse)
EOF
)
    echo $val
}

function2

关于bash: bc 命令对 * 的评估,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16315985/

相关文章:

linux - 移动和重命名 Xml 文件

mysql - 使用 like 和 % 的 SQL 错误

linux - 在 unix 中转置一个文件

bash - 从另一个命令获取一些环境变量后,在远程主机上运行的 docker 容器中运行任意命令

linux - 在大文件中搜索并添加模式

bash - 使用 bc 在 bash 中进行 float 学运算

bash - Shell脚本将文件中的十六进制值转换为十进制

bash - 为什么 bc 不显示该表达式结果的比例?

Bash:如何获取文件的字数并将其插入文件本身?

bash - 在文件夹打开或内容更改时运行 bash 脚本