[英]Compare a string using sh shell
我正在使用 SH shell,我試圖將字符串與變量的值進行比較,但if
條件始終執行為 true。 為什么?
這是一些代碼:
Sourcesystem="ABC"
if [ "$Sourcesystem" -eq 'XYZ' ]; then
echo "Sourcesystem Matched"
else
echo "Sourcesystem is NOT Matched $Sourcesystem"
fi;
echo Sourcesystem Value is $Sourcesystem ;
即使這不起作用:
Sourcesystem="ABC"
if [ 'XYZ' -eq "$Sourcesystem" ]; then
echo "Sourcesystem Matched"
else
echo "Sourcesystem is NOT Matched $Sourcesystem"
fi;
echo Sourcesystem Value is $Sourcesystem ;
其次,我們可以將其與 NULL 或空字符串匹配嗎?
您應該使用=
運算符進行字符串比較:
Sourcesystem="ABC"
if [ "$Sourcesystem" = "XYZ" ]; then
echo "Sourcesystem Matched"
else
echo "Sourcesystem is NOT Matched $Sourcesystem"
fi;
man test
說您使用-z
來匹配空字符串。
-eq
用於比較整數。 使用=
代替。
eq 用於比較整數,使用 equal '=' 代替,例如:
if [ 'AAA' = 'ABC' ];
then
echo "the same"
else
echo "not the same"
fi
祝你好運
-eq
是用於比較整數的 shell 比較運算符。 要比較字符串,您需要使用=
。
-eq
是數學比較運算符。 我從未將它用於字符串比較,依靠==
和!=
進行比較。
if [ 'XYZ' == 'ABC' ]; then # Double equal to will work in Linux but not on HPUX boxes it should be if [ 'XYZ' = 'ABC' ] which will work on both
echo "Match"
else
echo "No Match"
fi
在我測試過的 4 個 shell 中, ABC -eq XYZ
在zsh
和ksh
內置test
評估為真。 該表達式在/usr/bin/test
和dash
和bash
的內置函數下計算為 false 。 在ksh
和zsh
,字符串被轉換為數值並且相等,因為它們都是 0。IMO, ksh
和zsh
的內置函數的行為是不正確的,但是test
的規范對此不明確。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.