Bash 为什么浮点比较在a和“如果”或“U”中没有bc时有效&&&引用;命令

Bash 为什么浮点比较在a和“如果”或“U”中没有bc时有效&&&引用;命令,bash,shell,Bash,Shell,我能找到比较shell中浮动的唯一方法是: A=12.3 B=12.2 if [ $(bc <<< "$B <= $A") -eq 1 ] 据我所知&&仅在第一个命令返回且退出状态为零时执行第二个命令 然而,正如像素化学家在评论中所建议的,如果我们尝试在第二种方法中使用负数,它将不起作用,并给出相反的结果 有人能解释一下第二种方法在没有bc的情况下是如何工作的。请注意,如果你在第二种方法的两个数字前都加上一个负号,它仍然说a大于B,这是不正确的。是的,这是准确的,它不能

我能找到比较shell中浮动的唯一方法是:

A=12.3
B=12.2
if [ $(bc <<< "$B <= $A") -eq 1 ]
据我所知&&仅在第一个命令返回且退出状态为零时执行第二个命令

然而,正如像素化学家在评论中所建议的,如果我们尝试在第二种方法中使用负数,它将不起作用,并给出相反的结果


有人能解释一下第二种方法在没有bc的情况下是如何工作的。

请注意,如果你在第二种方法的两个数字前都加上一个负号,它仍然说
a大于B,这是不正确的。是的,这是准确的,它不能比较负数(如果它是比较的话)你能为这种行为提出一个解释吗?这根本不能比较数字。From:与
[[
一起使用时,
运算符使用当前区域设置按字典顺序排序。请尝试
A=4.7
:)
[[
比较模式,
((
用于比较数字,但
bash
不支持浮点。如果希望在shell中使用浮点,请使用Korn shell(
ksh
),将数字声明为
float a=13.7
,并使用:
((a>B))&&echo“a大于B”
,感谢您的解释
A=13.7
B=13.2

[[ $A > $B ]] && echo "A is greater than B"

[[ $A < $B ]] && echo "A is less than B" 
A is greater than B