在我的bash脚本中,我正在尝试浮点比较,例如。
a=0.32
b=0.38
我在下面写了一段代码,
if [[ $(`bc-l <<< "$b > $a"`) -eq 0 ]]; then
echo "true"
else
echo "false"
fi
请建议。
答案 0 :(得分:1)
确保您实际上在bash shell中运行。
#!/bin/bash
a=0.32; b=0.18; c=0.60
if [[ $(bc -l <<< "$a > $b") -eq 1 ]]; then
echo "$a > $b"
else
echo "$a <= $b"
fi
if [[ $(bc -l <<< "$a > $c") -eq 1 ]]; then
echo "$a > $c"
else
echo "$a <= $c"
fi
答案 1 :(得分:1)
只需将set -x
添加到您的脚本中即可显示其正在做的事情会有所帮助:
#!/bin/bash
set -x
a=0.32
b=0.38
if [[ $(`bc-l <<< "$b > $a"`) -eq 0 ]]; then
echo "true"
else
echo "false"
fi
输出:
+ a=0.32
+ b=0.38
+++ bc-l
./39599898.sh: line 8: bc-l: command not found
+ [[ '' -eq 0 ]]
+ echo true
true
您可能需要bc -l
,而不是bc-l
:
+ a=0.32
+ b=0.38
+++ bc -l
++ 1
./39599898.sh: line 8: 1: command not found
+ [[ '' -eq 0 ]]
+ echo true
true
那更像是它。现在看起来您只想比较1
bc
的{{1}}输出,而不是将其作为命令运行:
if [[ $(bc -l <<< "$b > $a") -eq 0 ]]; then
echo "true"
else
echo "false"
fi
+ a=0.32
+ b=0.38
++ bc -l
+ [[ 1 -eq 0 ]]
+ echo false
false
您可以进一步简化,因为您寻找的输出是布尔值,因此与0进行比较只是:
if ! let $(bc -l <<< "$b > $a"); then
echo "true"
else
echo "false"
fi
答案 2 :(得分:0)
您的脚本中存在语法错误。
$()
或后退标记用于命令替换,而不是两者。 您可以将其更正为
if [[ $(bc -l <<< "$b > $a") -eq 0 ]]; then
echo "true"
else
echo "false"
fi