2011-05-12 7 views
2

값 0.000000이 파일에 있습니다. 파일을 열고 변수에 할당합니다. 그러나 그 값을 if [ "$var" -eq "0.000000" ]과 비교하면 실제로는 평가되지 않습니다. 그 이유는 무엇일까요?쉘 스크립트 변수 값

또한 파일의 값이 0 인 경우, 값이 [ "$var" -eq "0" ] 인 경우에는 true로 평가됩니다.

+0

당신은 0.00000이 숫자로 해석되지 않고, 따라서 단지 동일 제로로 확인이 있습니까? –

+7

bash는 부동 소수점을 지원하지 않습니다. -eq는 정수에서 작동하며 대신 str 비교를 사용합니다. http://mywiki.wooledge.org/BashPitfalls를 참조하십시오. –

+0

나는 0으로 만 확인하지만 false도 반환합니다. – thetux4

답변

2
프레드릭으로

(그를 위해 +1) bash는 부동 소수점을 지원하지 않습니다 말했다. 필요한 경우 문자열 비교를 사용하십시오.

if [ "$var" = "0.000000" ] 
1

당신은 부동 소수점 연산을 지원하는 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 
+1

또는 Perl ... 또는 Python ... – Johnsyweb

+0

물론, Perl과 Python은 완전히 다른 구문을 사용하고 있지만 bash에서 ksh (및 상호)로 전환하는 것이 덜 파괴적입니다. – jlliagre

1

bash는 float을 인식 할 수 없습니다. bc을 사용해보십시오. 동등 함이 참이면 1을, 그렇지 않으면 0을 반환합니다.

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

fi 

또는 expr :

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

fi