我有以下两个值:
val1=13.2.8
val2=15.0.5
我想检查是否val1
小于val2
,我尝试过:
echo "if ($val1<$val2) 1" | bc
但它抛出以下错误:
syntax error on line 1, teletype
对于普通浮点数来说,它工作得很好。
实现这一目标的最佳方法是什么?
答案1
这些不是数字,至少不是数学意义上的数字。你可能想要的是版本字符串比较,由 GNU(也可能是其他)提供sort --version-sort
/ sort -V
:
if [[ "$(sort --version-sort <<< "$(printf '%s\n' "$val1" "$val2")" | head --lines=1)" = "$val1" ]]
then
echo "$val1 <= $val2"
fi
答案2
您不能对这些值使用算术比较。您应该使用字符串比较。在 bash 中你可以使用 '[[' :
[[ $val2 > $val1 ]] && echo "$val2 is greater than $val1"