我正在尝试让一个简单的 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
指示变量的值sip1
不是0
像您可能期望的那样,而是后面0
跟着一个回车符($'0\r'
在 Bash 语法中):
$ 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'}
应该清除变量的尾随回车符。