バッシュ比較演算子と式演算子


11

私はbashプログラミングが初めてです。私は2つの良い長いガイドを読みましたが、それらは演算子とキーワードについて私の頭を混乱させました。

より一般的で広く使用されているのはどれですか?いつ、なぜ使用するのかわかりません。

  1. test[[ ]]または[ ]あるいは(( ))
  2. $((exp)) または $[exp]
  3. -gtまたは>geまたは>=など。
  4. 使用する場合<、および>/または( )エスケープする必要がある場合\: \< \(など。
  5. ==または=(文字列比較)

私は基本的な違いを知っている[し、[[それ以外のご質問は、私にとっては謎です。

前もって感謝します


2
最新の非常に有用なwikiであり、多くの優れた実践に言及しているのはGregのwikiです。BashガイドとそのFAQは特に役立ちます。

回答:


5
  • testは、(明らかに)特定の条件をテストするシェルビルトインです。一部の古いシェルには特別なコマンドが必要です。そのため、プログラムもにあります/usr/bin/test
  • [また、いくつかの条件をテストするプログラムです。このソフトウェアには閉じ括弧も必要で、で見つけることができます/usr/bin/[
  • [[…]]代わるものであるtest[。Kornシェル用に開発されました(ksh)。しかし、Bashバージョンが2よりも大きい場合やZシェルでも見られます。二重括弧には、気の利いた機能がいくつかあります。
    • シェルは、単語の分割やファイル名の展開を行いません。
    • 引用する必要はありません。
    • 代わりの-a(AND)または-o(OR)を使用でき&&たり||
    • =より多くのことができます。
  • ((…))はと同等letです。基本的に((expression))はと同じlet "expression"です。ただし、let複数の式を使用できますが、二重中括弧では1つの式しか使用できません。
  • $((…))(また$[…])何らかの計算を行います。シェルは、中括弧内の式を計算しようとし、その式を結果に置き換えます。だからにecho $((1+1))つながるecho 2。したがって、シェルは数値2を出力します。

たびに、あなたはダッシュと2つの文字(とオプションを使用しなければならない2つの数値を比較したいとき-ge-ltなど)。文字列を比較する場合は、=またはを使用する必要があります!=

エスケープに関するあなたの質問に答えることは非常に困難です。シェル以外で使用するソフトウェアに依存するためです。つまりgrepgrep -E異なるエスケープが必要です。これはsedawkなどにも当てはまります。したがって、最良のオプションは、マンページを参照することです。しばらくすると、慣れて、エスケープを使用するタイミングがわかります。


ありがとうございました。もう1つの質問-((...))を使用して比較を行うことができるため、このバージョンを使用するのがより一般的です:if((2> 1))OR this:if [[2 -gt 1]]
MikeD

私はこれif [ 2 -gt 1 ]; …がより一般的だと思います、なぜならこれはシェルスクリプトでより頻繁に見られ、私が知る限りこれがPOSIXに準拠しているからです。
qbi

留意すべきもう1つのことは、expressionがゼロに評価される/返される場合、[expression]は真ですが、expressionがゼロ以外に評価される/返される場合、((expression))は真です。
ジョー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.