簡體   English   中英

使用 sh shell 比較字符串

[英]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

祝你好運

我有同樣的問題,這樣做

if [ 'xyz' = 'abc' ]; then
  echo "match"
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 XYZzshksh內置test評估為真。 該表達式在/usr/bin/testdashbash的內置函數下計算為 false 。 kshzsh ,字符串被轉換為數值並且相等,因為它們都是 0。IMO, kshzsh的內置函數的行為是不正確的,但是test的規范對此不明確。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM