【发布时间】:2013-05-01 09:50:32
【问题描述】:
我在 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(减法运算符周围有空格)有效,而乘法的相同格式无效?
【问题讨论】:
-
尝试在非空目录中运行
echo 2 * 3,看看能不能搞定。 -
这很有趣。但是,我可以使用转义来完成这项工作吗?如果我这样做
$(bashcalc $cat_radius \* $cos),我不会有效地调用echo 2 \* 2,它正确地转义了*并且没有列出目录? -
问题不在调用点,而在函数中
$@的扩展。 jm666 的回答涵盖了它。