私はbashで整数比較を行っています(ユーザーがrootとして実行されているかどうかを確認しようとしています)。2つの異なる方法が見つかりました。
ダブルが等しい:
if [ $UID == 0 ]
then
fi
-eq
if [ $UID -eq 0 ]
then
fi
Bashには> =または<=がなく、-geと-leしかないことを理解しているので、なぜ==
がある場合-eq
?
両者を比較する方法に違いはありますか?
==
は=
のbash
固有のエイリアスで、-eq
数値比較の代わりに文字列(字句)比較を実行します。 (Perlとは逆です。Wordスタイルの演算子は数値であり、記号的な演算子は字句です。)
文字列には>=
または<=
比較演算子はありません。しかし、((...))
算術コマンドでそれらを使用して整数を比較できます。
他の文字列比較演算子(==
、!=
、<
、>
ではなく=
)を使用して、整数を内部で使用する場合も比較できます((...))
。
例
[[ 01 -eq 1 ]]
と(( 01 == 1 ))
はどちらも整数比較を行います。どちらも本当です。[[ 01 == 1 ]]
と[ 01 = 1 ]
はどちらも文字列比較を行います。どちらも誤りです。(( 01 -eq 1 ))
と(( 01 = 1 ))
はどちらもエラーを返します。注:二重括弧構文[[...]]
および二重括弧構文((...))
は、すべてのシェルでサポートされているわけではありません。
整数比較を行う場合は、(())を使用することをお勧めします。> =なども使用できます。
例:
if (( $UID == 0 )); then
echo "You are root"
else
echo "You are not root"
fi