我是一个写作我的第一个功能的bash noob。 angle_reduce位于一个名为bashcalc-functions.sh的文件中。我希望angle_reduce以一个角度(以弧度表示)并输出该角度减小到[0,2pi]。据我了解,bash中的%
执行余数操作而不是模运算,因此我在if语句中添加了对此进行说明。
function angle_reduce {
twopi=$(echo "8*a(1)" | bc -l)
x=$(echo "$1%$twopi" | bc)
if ["$x" -lt 0]
then
x=$(echo "$x+$twopi" | bc -l)
fi
echo "$x"
}
然后我这样运行:
~/bash_practice # . bashcalc-functions.sh
~/bash_practice # angle_reduce "-10"
-bash: [-3.71681469282041352312: command not found
-3.71681469282041352312
我不知道这个语法错误来自哪里。此外,看起来if语句中的行根本没有执行,因为输出仍然是负数。
答案 0 :(得分:0)
如果小于0,则它将以-
开头,所以请使用
if [ ${x::1} = - ]
答案 1 :(得分:0)
bash' s []不支持浮点运算。所以您可以使用bc
代替
某些bc
实现可以执行以下操作(也许是GNU bc?)。
if [ $(bc <<< "$x < 0") = "1" ]; then
以下仅使用bc标准,因此可以在任何bc
if [ "$(bc <<< "if($x < 0){1}")" = "1" ]; then
然而,对于这种情况,史蒂文的回答似乎很简单。