сравнивать переменные типа float и integer в результатах bash - PullRequest
0 голосов
/ 02 мая 2018

Я пытаюсь оценить элементы в массиве с помощью float, используя в качестве примера следующую команду:

sorted=(0 0.0223611 0.977639)
if [[ $(echo "${sorted[-2]} > 0" | bc) ]];then echo 'yes';else echo 'no';fi

, который даст правильный ответ «да»; однако, когда я изменяю «0» на «0,8»,

if [[ $(echo "${sorted[-2]} > 0.8" | bc) ]];then echo 'yes';else echo 'no';fi

он по-прежнему дает тот же ответ «да», что неверно.

После этого, если я изменю командную строку на:

if [[ $(echo ${sorted[-2]} > 0.8 | bc) ]];then echo 'yes';else echo 'no';fi

ответ «нет», и это правильно. Но если я вернусь к 0, ответ все равно будет «нет».

Так что каждый раз, когда я добавляю или удаляю двойную кавычку, первый ответ правильный. Но это не изменится независимо от того, как поплавок изменится впоследствии. Я полностью потерян, что здесь происходит. Пожалуйста, помогите мне. Спасибо!

1 Ответ

0 голосов
/ 02 мая 2018

bc печатает 0 для false и 1 для true. И [[ 0 ]], и [[ 1 ]] имеют значение true, но вы можете сравнить их с 1:

if [[ $( bc -l <<< "${sorted[-2]} > 0.8" ) = 1 ]]

или используйте арифметическое выражение, в котором 0 равно false, а 1 (или любое другое число) - true:

if (( $( bc -l <<< "${sorted[-2]} > 0.8" ) ))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...