SH,无法实现平等

SH,无法实现平等

我正在尝试让一个简单的 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'}应该清除变量的尾随回车符。

相关内容