Bashで比較演算子を使用する方法は? [コピー]

Bashで比較演算子を使用する方法は? [コピー]

Bashで<=>=および使用方法は何ですか><

変える:

if [[ $arg1 -ge $num1 && $arg2 -le $num2 ]]; then
     ...
fi

次のようなものがあります。

if [[ $arg1 >= $num1 && $arg2 <= $num2 ]]; then
     ...
fi

ベストアンサー1

具体的にはbash

  • ((arg1 >= num1))(から継承されますksh)算術比較を実行します。arg1これはnum1同じ名前のシェル変数を参照します。各変数は算術拡張として解釈され、結果が置き換えられます。ここで$arg1is010$num1isの場合、4+5結果は次のようになります。間違った((...))コマンドはゼロ以外の終了状態で返されます。)0108は8進数で、4+59は8進数であるためです。
  • (($arg1 >= $num1)):全体の算術式が評価される前と$arg1拡張されることを除いて、上記と同じです。 wasとwasの$num1場合、それ自体が有効な式ではないため、前のコマンドは失敗します。しかし、ここでは算術式が評価されるので成功します。通常、算術式では省略するのが最善です。たとえば。$arg1(2$num12)(22)(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/nullexpr(語彙比較を強制し、演算子のように見える文字列の問題を回避するには、スペースを含めてください。)またはをawk 'BEGIN{exit(!(""ARGV[1] <= ""ARGV[2]))}' "$arg1" "$num1"使用してくださいstrcoll()

おすすめ記事