比较bash中的数字时,为什么"[[10 <2]]"为真?

raj*_*jen 6 bash shell

我跑的时候

if [[ 10 < 2 ]];
  then echo "yes";
else echo "no"; 
fi
Run Code Online (Sandbox Code Playgroud)

在shell中,它返回yes.为什么?应该是no吗?而当我跑

if [[ 20 < 2 ]];
  then echo "yes";
else echo "no";
fi
Run Code Online (Sandbox Code Playgroud)

它返回no.

Den*_*ich 10

因为您根据词典顺序而不是数字来比较字符串

你可以使用[[ 10 -lt 2 ]][[ 20 -lt 2 ]].-lt代表小于(<).对于Greater than(>),-gt可以使用表示法.

在bash中,可以使用双括号来执行数字比较:

if ((10 < 2)); then echo "yes"; else echo "no"; fi
Run Code Online (Sandbox Code Playgroud)

以上例子将回应 no

  • 有时我觉得 JavaScript 不应该成为编程的替罪羊,尽管它有令人困惑的语法和醉人的类型转换魔法,因为 Bash 的这个“功能”感觉像是彻底的背叛,应该在地狱的第九圈中受到惩罚。(我今天被 bash 字符串比较所拥有......) (2认同)