「>」と「-gt」の違い

「>」と「-gt」の違い

これらの違いは何ですか?

SEC=$(mysql -hxxx -Pxxx -uxxx -pxxx -se "SELECT Seconds FROM tablename")

SEC=100

どちらも同じ結果(100)を返します。しかし、テストしてみると次のようになります。

if [ ${SEC} > 1 ]
then
    echo "SEC GT 1"
else
    echo "SEC LT 1"
fi

最初は次を返します。

"SEC GT 1"

2番目は次を返します。

"SEC LT 1"

ただし、次のように変更すると:

if [ ${SEC} -gt 1 ]

これにより結果は逆になります。

私はそれがデータ型に関連していると仮定しており、おそらくcast同じ結果を得るにはそのうちの1つが必要です。

IF毎回そのセクションを変更する必要があることを覚えておく必要があるため、現在のテストはめちゃくちゃです。

ベストアンサー1

最初は、最後に追加のパラメータが必要であることを除いて、[他のコマンドと同様に通常のコマンドとして実装されました。 (これは通常のコマンドとして存在しますが、ほとんどのシェルにも組み込まれています。)一般的な解析が適用される一般的なコマンドであるため、数学演算子は使用できず、引用符はありません。リダイレクト演算子を含めると、次のようになります。 、コマンドの(空の)出力を名前付きコマンドにリダイレクトします。コマンドは、ほとんどダッシュで始まる特別なオプションの一般的な規則に従います。ほとんどの演算子はダッシュで始まります。したがって、ファイルを読み取ることができるかどうかをテストし、両方のテストを「and」演算子に結合し、合計が等しいかどうかをテストするなどの作業が必要です。test[]<>[ ${SEC} > 1 ][ ${SEC} ] >1[1[[ -r foo ][ -r foo -a -w bar ][ $x -eq $y ]$x$y

これらの古いシェルには文字列の同一性(=ダッシュ文字の規則から外れた数少ない演算子の1つ)がありましたが、文字列の順序はありません。ただし、[ $x -le $y ]整数が$x小さいか等しいかをテストするなどの数値比較を実行し、前にゼロがある場合は数値が8進数であることを意味するため、$yこの演算子セットには数値同等性が含まれます[ $x -eq $y ][ 010 -eq 8 ]

[[ … ]]Kshはbashとzshでも利用可能な構文を導入しました。とは異なり、シェルのパーサーが認識する[ … ]一般的なコマンドなので、特殊文字(たとえば、および)を引用符なし[[ … ]]で内部的に使用できます(実際には引用符で囲むことはできません)。その後、友達はすでに数値比較と文字列比較に使用でき、友達は文字列比較演算子(辞書順1)で作成されています。たとえば、しかし。(<-lt=<[ 9 -lt 10 ][[ 10 < 9 ]]

1このユーティリティは文字列ソート機能を提供し、POSIXシェル機能に含まれていないいくつかの用途の1つexprです。exprただし、expr文字列と数値の比較には同じ演算子が使用されるため、expr 9 \< 10but expr a9 \> a10
²文字列がバイト文字列として解釈されるか、現在のロケールの文字列として解釈されるかは、シェルによって異なります。

おすすめ記事