您好我有以下代码:
#!/bin/bash
atmo =`echo "-5000*l(10^-6)" | bc -l`
echo "Threshold: $atmo m"
for altitude in {70000..0..10}
do
if [[ $altitude < $atmo ]]; then
printf "A %.1f m\n" "$altitude"
else
printf "B %.1f m\n" "$altitude"
fi
done
因此,如果altitude
为高(约69077),则应该进入else分支。现在这实际上有效,直到altitude
失去一个有效数字(例如从10000切换到9990)。然后它开始转到else分支,直到altitude
低于atmo
的十分之一。当高度从1000切换到990时,再次发生这种情况。再次进入其他分支,直到高度低于atmo
的百分之一,依此类推。
所以基本上是这样的:
现在问题是如何解决这种奇怪的行为?
答案 0 :(得分:3)
问题是[[ $altitude < $atmo ]]
进行字符串比较。 $atmo
是69077,它在700之前和之后的100000之间,因此给你带来奇怪的结果。
Bash不支持小数,因此您也可以使用bc
进行比较:
if (( $(bc -l <<< "$altitude < $atmo") ))
then
printf "A"
else
printf "B"
fi
printf " %.1f m\n" "$altitude"