Значение переменной сценария оболочки - PullRequest
2 голосов
/ 12 мая 2011

У меня есть значение 0.000000, записанное в файле. Я открываю файл и назначаю его переменной. Но когда я сравниваю это значение как if [ "$var" -eq "0.000000" ], оно не оценивается как истинное. В чем может быть причина?

Более того, если файл имеет только 0, и если я сравниваю его значение [ "$var" -eq "0" ], оно оценивается как ожидаемое к истинному.

Ответы [ 3 ]

2 голосов
/ 12 мая 2011

Как сказал Фредрик (+1 для него), bash не поддерживает плавающую точку. Если необходимо, используйте сравнение строк:

if [ "$var" = "0.000000" ]
1 голос
/ 12 мая 2011

bash не может понять float.Попробуйте использовать bc, который вернет 1, если равенство истинно, иначе 0.

if [ $(bc <<< $var==0.000000) -eq 1 ]
then

fi

или expr:

if [ $(expr $var == 0.000000) -eq 1 ]
then

fi
1 голос
/ 12 мая 2011

Вы можете переключиться на ksh, который поддерживает арифметику с плавающей запятой:

$ bash
a=0.00000
[ $a -eq 0 ] && echo ok || echo ko
bash: [: 0.00000: integer expression expected
ko
$ ksh
$ a=0.00000
$ [ $a -eq 0 ] && echo ok || echo ko
ok
$ a=0.00001
$ [ $a -eq 0 ] && echo ok || echo ko
ko
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...