Bashで<=
、>=
および使用方法は何ですか>
?<
変える:
if [[ $arg1 -ge $num1 && $arg2 -le $num2 ]]; then
...
fi
次のようなものがあります。
if [[ $arg1 >= $num1 && $arg2 <= $num2 ]]; then
...
fi
答え1
具体的にはbash
:
((arg1 >= num1))
(から継承されますksh
)算術比較を実行します。arg1
これはnum1
同じ名前のシェル変数を参照します。各変数は算術拡張として解釈され、結果が置き換えられます。ここで$arg1
is010
と$num1
isの場合、4+5
結果は次のようになります。間違った(((...))
コマンドはゼロ以外の終了状態で返されます。)010
8は8進数で、4+5
9は8進数であるためです。(($arg1 >= $num1))
:全体の算術式が評価される前と$arg1
拡張されることを除いて、上記と同じです。 wasとwasの$num1
場合、それ自体が有効な式ではないため、前のコマンドは失敗します。しかし、ここでは算術式が評価されるので成功します。通常、算術式では省略するのが最善です。たとえば。$arg1
(2
$num1
2)
(2
2)
(2 >= 2)
$
a=2+2; echo "$((3 * $a))"
a=2+2; echo "$((3 * a))"
let "..."
(またkshで)。これと同じです。ただし、((...))
通常のコマンドで構文解析される点を除き、読みにくく移植性が低下し、引用にさらに注意を払う必要があります。[ "$arg1" -ge "$num1" ]
。これは標準的で携帯可能です。 10進定数のみがサポートされます。[ 010 -ge 9 ]
同じです[ 10 -ge 9 ]
。[[ $arg1 -ge $num1 ]]
。 kshでも使用されますが、大きな違いがあります。今回は、$arg1
および が$num1
小数定数ではなく算術式で処理されます。[[ 010 -ge 9 ]]
再び false を返します。[[ $arg1 < $num1 ]]
。文字列比較。文字列を比較するために使用されるので、strcoll()
ロケールのソートアルゴリズムを使用します。ソートアルゴリズムを使用する<
と、/はバイト間比較を実行するため、および/がfalseを返すすべての文字列ペアがある可能性があります。サポートされていません。>
=
==
<
>
=
==
<=
>=
[ "$arg1" "<" "$num1" ]
。非標準。上記と同じですが、[
コマンドを使用します。<
リダイレクト演算子として扱われないように引用する必要があります。expr " $arg1" "<=" " $num1" > /dev/null
expr
(語彙比較を強制し、演算子のように見える文字列の問題を回避するには、スペースを含めてください。)またはをawk 'BEGIN{exit(!(""ARGV[1] <= ""ARGV[2]))}' "$arg1" "$num1"
使用してくださいstrcoll()
。
答え2
これらの演算子は、例(( ... ))
と$(( ... ))
(算術評価そして算術拡張それぞれ):
if (( arg1 >= num1 )) && (( arg2 <= num2 )); then
...
fi
また、let
以下は上記と同じです。
if let "arg1 >= num1" && let "arg2 <= num2"; then
...
fi
Bashのマニュアルの「算術評価」セクションを参照してください。