Можно ли предложить мне синтаксис для того, чтобы сделать сравнение с плавающей точкой в сценарии Bash? Я идеально хотел бы использовать его в качестве части if
оператор. Вот маленький фрагмент кода:
key1="12.3"
result="12.2"
if (( $result <= $key1 ))
then
# some code here
fi
bash не работает с поплавками, используйте awk
key1=12.3
result=12.5
var=$(awk 'BEGIN{ print "'$key1'"<"'$result'" }')
# or var=$(awk -v key=$key1 -v result=$result 'BEGIN{print result<key?1:0}')
# or var=$(awk 'BEGIN{print "'$result'"<"'$key1'"?1:0}')
# or
if [ "$var" -eq 1 ];then
echo "do something"
else
echo "result more than key"
fi
есть и другие оболочки, которые могут работать с поплавками, например zsh или ksh, вы можете попробовать использовать и их
bc
- ваш друг:
key1="12.3"
result="12.2"
if [ $(bc <<< "$result <= $key1") -eq 1 ]
then
# some code here
fi
Обратите внимание на несколько непонятную нотацию here string (<<<
), как хорошую альтернативу echo "$result <= $key1" | bc
.
Кроме того, небазовая bc
печатает 1
для true и 0
для false.