尝试生成减少角度的bash函数时出现语法错误

尝试生成减少角度的bash函数时出现语法错误,bash,Bash,我是写第一个函数的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)

我是写第一个函数的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,那么它将以-,开始,所以继续

if [ ${x::1} = - ]

bash的[]不支持浮点运算。所以你可以用bc来代替

某些bc实现可以执行以下操作,可能是GNU bc

if [ $(bc <<< "$x < 0") = "1" ]; then

然而,Steven的回答似乎很简单,对于这种情况来说是干净的。

您应该在@ymonad之后[之前]添加空格,我刚刚这么做了-现在输出是-bash:[:-3.7168146928204141352312:应为整数表达式-3.7168146928204141352312Bash不懂浮点运算。如果所讨论的变量是浮点,请使用bc进行比较。我希望您将此作为练习,而不是实际使用bash编写此类代码:它不是通用编程语言。Steven的Soluteion可以工作,但这个不行。输出是第1行teletype-bash上的语法错误:[:=:一元运算符应为-3.7168146928041352312您能检查bc的输出吗?输入x=-3.14;bc某些bc似乎给出了错误:…电传打字消息。因此,可能您在我的机器上使用了不同的bc实现。比较似乎不符合bc标准。因此,请忘记我的答案。我稍后将删除此答案。我刚刚意识到我没有使用GNU谢谢。
if [ "$(bc <<< "if($x < 0){1}")" = "1" ]; then