228

SHシェルを使用していて、文字列を変数の値と比較しようとしていますが、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または空の文字列と一致させることができますか?

4

7 に答える 7

327

=文字列比較には演算子を使用する必要があります。

Sourcesystem="ABC"

if [ "$Sourcesystem" = "XYZ" ]; then 
    echo "Sourcesystem Matched" 
else
    echo "Sourcesystem is NOT Matched $Sourcesystem"  
fi;

man test-z空の文字列の照合に使用することを示しています。

于 2012-06-01T11:24:24.150 に答える
90

-eq整数の比較に使用されます。=代わりに使用してください。

于 2012-06-01T11:24:19.660 に答える
12

-eq整数を比較するためのシェル比較演算子です。文字列を比較するには、 を使用する必要があります=

于 2012-06-01T11:25:15.427 に答える
4

-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
于 2012-06-01T11:25:12.803 に答える
3

私がテストした 4 つのシェルのうち、 組み込みの forおよびABC -eq XYZで true と評価されます。式は、およびのビルトインの下で false と評価されます。とでは、文字列は数値に変換され、どちらも 0 であるため、等しくなります。IMO、とのビルトインの動作は正しくありませんが、 の仕様はあいまいです。 testzshksh/usr/bin/testdashbashkshzshkshzshtest

于 2012-06-01T14:10:22.157 に答える