所以想要转换这个函数,其输出是一个数字。这个数字是通过一些无关的json文件卷曲的。
#error input 1
if (($(masterfunc) >= 1)); then
#I've also tried
#error input 2
if (($(masterfunc | bc -l) >= 1)); then
我得到这些错误,我假设这是因为它将其作为字母或命令输出而不是数字。
#error output 1
((: 1.00048333447157914468 >= 1: syntax error: invalid arithmetic
operator (error token is ".00048333447157914468 >= 1")
#error output 2
((: .99989817794934530799 >= 1: syntax error: operand expected (error
token is ".99989817794934530799 >= 1")
我假设这是一个浮点运算问题,但是它应该通过bc解决?
我是bash的新手,所以如果问题是一些无关的语法错误,我道歉。
答案 0 :(得分:2)
这实际上相当复杂。 shell根本不理解实数,所以你必须得到其他东西(比如bc
)来做比较并输出一些bash可以理解的更简单的东西。我认为最简单的方法是:
if [ $(echo "$(masterfunc) >= 1" | bc) -eq 1 ]; then
解释,一步一步:
echo "$(masterfunc) >= 1"
运行masterfunc
功能,添加"> = 1"到它的输出,并将结果(例如" 1.00048333447157914468> = 1")发送到标准输出。
echo "$(masterfunc) >= 1" | bc
运行以上内容并将其传送到bc
,这将进行比较并打印" 1"如果masterfunc
输出大于或等于1," 0"如果不是那么的话。注意:您可以尝试手动运行它,看看它是如何工作的。
这" 1" /" 0"输出更符合bash可以理解的范围,但我们仍然需要实际告诉bash该怎么做。
[ $(echo "$(masterfunc) >= 1" | bc) -eq 1 ]
运行上述内容,使用$( )
捕获其输出,并将其嵌入测试表达式中。基本上,根据bc
的输出,这相当于[ 1 -eq 1 ]
或[ 0 -eq 1 ]
。
答案 1 :(得分:0)
使用此:
if (( $(printf '%s >= 1\n' "$(masterfunc)" | bc -l) )); then ...