回答:
==
であるbash
ため特異的エイリアス=
の代わりに文字列(字句)比較行い、-eq
数値比較を。(Perlから逆向きです:単語スタイルの演算子は数値であり、シンボリックなものはレキシカルです。)
-eq
ように指示bash
します(0
文字列が数値でない場合は警告なしに生成されます)。
[ 01 -eq 1 ]
but [ 01 != 1 ]
です。
==
として[
、操作者が非標準であり、使用すべきではない、そうでないbashの固有。これはkshによって導入され、zsh(最初=
に引用する必要がありますが)、yashおよびGNU [
ユーティリティ(および一部のシステムでkshスクリプトとして実装されたそのようなユーティリティ)でもサポートされています。
$ if [ "hello" -eq 0 ]; then echo true; fi
bash:[:hello:integer expression expected
ボロバンの答えを詳しく説明するには...
何もありません>=
か、<=
文字列の比較演算子。しかし、((...))
算術コマンドでそれらを使用して整数を比較することもできます。
また、(他の文字列比較演算子を使用することができ==
、!=
、<
、>
、ではなく、=
あなたが内側にそれらを使用する場合)の整数を比較します((...))
。
例
[[ 01 -eq 1 ]]
と(( 01 == 1 ))
整数の比較を行います。両方とも真実です。[[ 01 == 1 ]]
と[ 01 = 1 ]
文字列比較を行います。どちらも偽です。(( 01 -eq 1 ))
と(( 01 = 1 ))
エラーを返します。注:二重括弧構文[[...]]
と二重括弧構文((...))
は、すべてのシェルでサポートされているわけではありません。
mksh
/ zsh
を除く(POSIXモードを除く(POSIX機能ではないが)))は、8進数(10進数で8)として扱われる(( 010 == 10 ))
ためfalseを返すことに注意してください010
。
test
/ [
実装には>=
/ <=
演算子はありませんが(yash
'sに[
はあります)、expr
そのような演算子がありますが、引数が数値として認識される場合は算術比較を行います(expr 01 '>=' 1
trueをexpr X01 '>=' X1
返し、falseを返します)。
[ $UID -eq 0 ]
ではなく[ $UID -eq 0]
。