Shell

SH,不能使平等工作

  • November 15, 2022

我試圖讓一個簡單的 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

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

根據您填充變數的具體方式,考慮從中刪除輸入符:

  • 如果您的程式碼類似於sip1=$(command...),那麼sip1=$(command... | tr -d '\r')應該去掉任何雜散的輸入符,讓您的測試成功。
  • 或者,假設是 Bash,刪除尾隨輸入符似乎可以使用 syntax ${foo%$'\r'},因此sip1=${sip1%$'\r'}應該清除尾隨輸入的變數。

引用自:https://unix.stackexchange.com/questions/725034