간단한 if 문을 작동시키려고 합니다.
if [ $sip1 = 0 ] ; then do stuff ; fi
내 하위라인에는 sh
내가 겪고 있는 어려움이 표시됩니다.
정수로 저장하고 있는 0을 인식할 수 없습니다. 문자열과 비교하면 일치하지 않는다고 나옵니다.
# if [ `expr $sip1` ] ; then echo hi
> fi
hi
# if [ `expr $sip1 = 1` ] ; then echo hi; fi
hi
# if [ `expr $sip1 = 2` ] ; then echo hi; fi
hi
# expr $sip1
0
# if [ `expr $sip1 + 0 = 2` ] ; echo hi
>
# if [ `expr $sip1 + 0 = 2` ] ; then echo hi
> fi
expr: non-numeric argument
# echo $sip1
0
# if [ $sip1 = "0" ] ; then echo hi ; fi
# if [ $sip1 = '0' ] ; then echo hi ; fi
# echo ">$sip1<"
<0
답변1
귀하 가 게시한 내용 echo
:
# echo ">$sip1<"
<0
예상할 수 있듯이 표시기 변수의 값 뒤에는 캐리지 리턴 문자( Bash 구문) 가 sip1
오지 않습니다 .0
0
$'0\r'
$ zero_cr=$'0\r'
$ if [ "$zero_cr" = "0" ] ; then echo hi ; fi
$ zero='0'
$ if [ "$zero" = "0" ] ; then echo hi ; fi
hi
## Or, using the proper numeric equality operator:
$ if [ "$zero" -eq "0" ] ; then echo hi ; fi
hi
변수를 채우는 방법에 따라 변수에서 캐리지 리턴을 제거하는 것이 좋습니다.
sip1=$(command...)
코드가 다음 과 같으면sip1=$(command... | tr -d '\r')
잘못된 캐리지 리턴이 제거되고 테스트가 성공해야 합니다.또는 Bash를 가정하면 후행 캐리지 리턴을 제거하는 것은 구문을 사용하여 작동하는 것으로 보이
${foo%$'\r'}
므로sip1=${sip1%$'\r'}
변수에서 후행 캐리지 리턴을 지워야 합니다.