Bash: -eqと二重同じ

Bash: -eqと二重同じ

私はbashで整数比較を実行しています(ユーザーがrootとして実行されていることを確認しようとしています)、2つの異なるアプローチを見つけました。

ダブルは次のとおりです。

if [ $UID == 0 ]
then
fi

-eq

if [ $UID -eq 0 ]
then
fi

bash には >= または <= がなく、-ge と -le だけがあることがわかります。それでは、==aがある理由は何ですか-eq

両側の比較方法に違いはありますか?

答え1

==数値比較の代わりに文字列(語彙)比較を実行するbash特定のエイリアスです。 (Perlの後退です。単語スタイル演算子は数字で、記号演算子は語彙です。)=-eq

答え2

詳細説明ボロバンの答え...

文字列には>=OR比較演算子はありません<=。ただし、((...))算術命令と組み合わせて使用​​して整数を比較できます。

内部的に別の文字列比較演算子を使用している場合==(使用しない場合)、それを使用して整数を比較することもできます。!=<>=((...))

はい

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

注:すべてのシェルが二重括弧構文と二重[[...]]括弧構文をサポートしているわけではありません。((...))

答え3

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

例:

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

関連情報