web-dev-qa-db-ja.com

バッシュ:二重の等しいvs -eq

私はbashで整数比較を行っています(ユーザーがrootとして実行されているかどうかを確認しようとしています)。2つの異なる方法が見つかりました。

ダブルが等しい:

if [ $UID == 0 ]
then
fi

-eq

if [ $UID -eq 0 ]
then
fi

Bashには> =または<=がなく、-geと-leしかないことを理解しているので、なぜ==がある場合-eq

両者を比較する方法に違いはありますか?

49
beatgammit

===bash固有のエイリアスで、-eq数値比較の代わりに文字列(字句)比較を実行します。 (Perlとは逆です。Wordスタイルの演算子は数値であり、記号的な演算子は字句です。)

55
geekosaur

bollovanの答えを詳しく説明するには ...

文字列には>=または<=比較演算子はありません。しかし、((...))算術コマンドでそれらを使用して整数を比較できます。

他の文字列比較演算子(==!=<>ではなく=)を使用して、整数を内部で使用する場合も比較できます((...))

  • [[ 01 -eq 1 ]](( 01 == 1 ))はどちらも整数比較を行います。どちらも本当です。
  • [[ 01 == 1 ]][ 01 = 1 ]はどちらも文字列比較を行います。どちらも誤りです。
  • (( 01 -eq 1 ))(( 01 = 1 ))はどちらもエラーを返します。

注:二重括弧構文[[...]]および二重括弧構文((...))は、すべてのシェルでサポートされているわけではありません。

13
toxalot

整数比較を行う場合は、(())を使用することをお勧めします。> =なども使用できます。

例:

if (( $UID == 0 )); then
   echo "You are root"
else
   echo "You are not root"
fi
7
bollovan