我在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:解析错误”。
我的第一个想法是星号是问题所以我试图逃避它。然而,这给了我一个非法的字符错误。
解决方案最终删除了所有空格
val=$(bashcalc "$cat_radius*$cos")
问题:为什么计算catMinusMouse(在减法运算符周围有空格)可以工作,而相同的乘法格式不起作用?
答案 0 :(得分:2)
您需要转义*
或将其括在“引号”
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
答案 1 :(得分:2)
这里真正的问题是您没有在$@
函数中引用bashcalc
。
将其更改为:
function bashcalc {
echo "$@" | bc -l
}
更好,don't use echo
。将其更改为:
bashcalc() {
bc -l <<< "$@"
}
答案 2 :(得分:1)
尝试以下方法:
val=$(echo "$cat_radius * $cos"| bc)
即管道到bc
(bashcalc),它将进行计算。