bashで整数比較を行っています(ユーザーがrootとして実行されているかどうかを確認しようとしています)が、2つの異なるものが見つかりました方法:
二重に等しい:
if [ $UID == 0 ] then fi 
-eq
if [ $UID -eq 0 ] then fi 
 bashには> =または< =がなく、-geと-leのみがあることを理解しています。なぜ、 if there “sa -eq?
両側の比較方法に違いはありますか?
コメント
回答
 ==はbash固有の=のエイリアス。これは、-eqの数値比較の代わりに文字列(字句)比較を実行します。 (これはPerlから逆方向です。ワードスタイルの演算子は数値であり、シンボリック演算子は字句です。)
コメント
- つまり、両側は整数であり、両側を文字列に変換してから比較しますか?
 - より正確には'逆に、すべてが文字列です。
-eqはbashに文字列を整数として解釈するように指示します(文字列の場合は警告なしで0を生成しますisn ' t数値)。 -  @tjameson例を挙げます:
[ 01 -eq 1 ]ただし、[ 01 != 1 ]。 -  
==は[演算子として非標準であり、使用されません。 bash固有ではありません。kshによって導入され、zshでもサポートされています(ただし、最初の=は引用符で囲む必要があります) 、yashおよびGNU[ユーティリティ(少なくとも一部のシステムではkshスクリプトとして実装されているそのようなユーティリティ)。 -  @geekosaur文字列が'でない場合、bashv4.3.42から警告が表示されます。 t数値:
$ if [ "hello" -eq 0 ]; then echo true; fibash:[:hello:整数式が必要です 
回答
または<=比較演算子。ただし、これらを((...))算術コマンドで使用して整数を比較することもできます。
他の文字列比較演算子(==、!=、<、>、ただし=)((...))内で整数を使用する場合に整数を比較します。
例
-  
[[ 01 -eq 1 ]]と(( 01 == 1 ))はどちらも整数を実行します比較。どちらも当てはまります。 -  
[[ 01 == 1 ]]と[ 01 = 1 ]はどちらも文字列の比較を行います。どちらもfalseです。 -  
(( 01 -eq 1 ))と(( 01 = 1 ))の両方でエラーが返されます。 
注:二重括弧構文[[...]]および二重括弧構文((...))はすべてのシェルでサポートされているわけではありません。
コメント
- 注意(
mksh/zshを除く)( POSIXモードでは(ただし、'はPOSIX機能ではありません)))、iv id = “ce19a29e83″であるため、(( 010 == 10 ))はfalseを返します。 > 
は8進数(10進数で8)として扱われます。
test / [実装には' >= / <=演算子(yash ' s [は)、exprそのような演算子がありますが、それはarを行います引数が数値として認識される場合の算術比較(expr 01 '>=' 1はtrueを返し、expr X01 '>=' X1はfalseを返します)。回答
整数比較を行う場合は、(())を使用することをお勧めします。ここで、> =なども使用できます。
例:
if (( $UID == 0 )); then echo "You are root" else echo "You are not root" fi 
コメント
- または
(( UID == 0 ))または(( ! UID ))が重要です。((...))は非標準であることに注意してください(ksh機能はbashおよびzshバリエーションあり) 
[ $UID -eq 0 ]、[ $UID -eq 0]ではありません。