我在 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/