私はSH Shellを使っていて、文字列と変数の値を比較しようとしていますが、if
条件は常に真に実行されます。どうして?
ここにいくつかのコードがあります:
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は整数を比較するために使用されます代わりに等しい '='を使用します、例:
if [ 'AAA' = 'ABC' ];
then
echo "the same"
else
echo "not the same"
fi
がんばろう
私はこれと同じ問題を抱えていた、これを行う
if [ 'xyz' = 'abc' ];
then
echo "match"
fi
空白に注意してください。この場合、=
記号の前後に空白を使用することが重要です。
" 他の比較演算子 "をご覧ください。
-eq
は整数を比較するためのシェル比較演算子です。文字列を比較するためには=
を使う必要があります。
-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つのシェルのうち、ABC -eq XYZ
はtest
とzsh
のためのksh
組み込みでtrueと評価されます。この式は、/usr/bin/test
およびdash
およびbash
の組み込み関数の下でfalseと評価されます。 ksh
とzsh
では、文字列は両方とも0であるため、数値に変換され、等しくなります。IMO、ksh
とzsh
の組み込み関数の動作は正しくありませんしかし、test
の仕様はこれについてあいまいです。