次の 2 つの値があります。
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"