Проверка значения с плавающей запятой в пределах диапазона

Просто интересно, как я могу проверить, находится ли значение с плавающей запятой в определенном диапазоне, используя «bc» и условные выражения в bash. Заранее спасибо

Например, я хочу выяснить, находится ли 17.2 в диапазоне от 17,5 до 18,2.

Недавно узнали, что я могу использовать bc для проверки в выражении, подобном этому:

if [ $(bc <<< "$result > 17.5") -eq 1 ]

пытались сделать это if [ $(bc <<< "$result > 17.5") && $(bc <<< "$result <= 18.2") -eq 1 ]

, но сохраняем синтаксическую ошибку, а также не уверены, что это правильное выражение или синтаксис.

2
задан 11 June 2015 в 16:18

2 ответа

Вы не можете использовать && в единственных квадратных скобках. У Вас есть различные варианты, хотя:

  1. Использовать -a в [ ... ].

    if [ $(bc <<< "$result > 17.5") -eq 1 -a $(bc <<< "$result <= 18.2") -eq 1 ]
    
  2. Используйте двойные квадратные скобки [[ ... ]] та поддержка &&.

    if [[ $(bc <<< "$result > 17.5") == 1 && $(bc <<< "$result <= 18.2") == 1 ]]
    
  3. Используйте два [ ... ] условия, разделенные &&.

    if [ $(bc <<< "$result > 17.5") -eq 1 ] && [ $(bc <<< "$result <= 18.2") -eq 1 ]
    
  4. Можно использовать строку, выдерживают сравнение на результате этих двух выражений

    [[ $( bc <<< "$result > 17.5; %result <= 18.2" ) == $'1\n1' ]]
    
  5. bc понимает &&, также:

    if [[ $(bc <<< "$result > 17.5 && $result <= 18.2") == 1 ]]
    

Я предпочел бы 5.

4
ответ дан 11 June 2015 в 16:18

Bash не может обработать плавания.

Первый мы добираемся, являются ли они в диапазоне. Если это верно (1) тогда, число находится в диапазоне:

test=$(echo "17.5<$result<18.2" | bc)

Тогда мы проверяем, что это верно с если.

if [ $test -eq 1 ]
then
    echo true
else
    echo false
fi
0
ответ дан 11 June 2015 в 16:18

Другие вопросы по тегам:

Похожие вопросы: