2012-02-17 5 views
0

私はシェルスクリプトの条件をテストするための少なくとも4つの方法を知っています。シェルスクリプトの条件に使用される様々な種類のブレースの異なる用途は何ですか?

  • [ <cond> ];
  • [[ <cond> ]];
  • ((<cond>));
  • test <cond>;

のどれを使用するとき、私はまた、これらの方法の違いはあるものの包括的な概観を持ちたい、と考えメソッド。

ウェブを検索してみましたが、要約はありませんでしたが、まともなものは見つかりませんでした。まともなリストをどこかに持っていくのはすばらしいことでしょう(救助隊にスタックオーバーフロー!)。

+1

要約ではありませんが、このチュートリアルを参照してください。http://tldp.org/LDP/abs/html/testconstructs.htmlこれはhttp://www.ibm.com/developerworks/library/l-bash- test/index.html – EricSonaron

答えて

1

ここで説明します。

まず第一に、3つの異なる試験方法正確let "EXPRESSION" と同じで正確test EXPRESSION

  • [[ EXPRESSION ]]
  • ((EXPRESSION))と同じである

    • [ EXPRESSION ]に、基本的に存在します

      詳細に入る:

      test

      これはテストコマンドの祖父です。あなたのシェルがそれをサポートしていないとしても、ほぼすべてのunixシステムにはまだ/usr/bin/testコマンドがあります。したがって、testを呼び出すと、組み込み関数またはバイナリをフォールバックとして実行します。どのバージョンが使用されているかは、$ type testと入力してください。 [の場合も同様です。

      ほとんどの基本的なケースでは、このテストで十分です。あなたはより多くの電力が必要な場合は、そこだ

      if [ "$a" = test -o "$a" = Test ]; 
      if test "$a" = test -o "$a" = Test; 
      

      ...

      [[]]

      は、これは特別なbashのです。すべてのシェルがこれをサポートする必要はなく、バイナリフォールバックもありません。より強力な比較エンジン、特にpattern matchingと正規表現マッチングを提供します。

      if [[ "$a" == [Tt]es? ]]; # pattern 
      if [[ "$a" =~ ^[Tt]es.$ ]]; # RE 
      

      (())

      これは、算術式のbashの特別な使用され、計算結果がゼロでない場合も同様です。すべてのシェルがこれをサポートする必要はなく、バイナリフォールバックもありません。

      if ((x * (1 + x++))); 
      if let "x * (1 + x++)"; 
      

      ((...))またはlet内の変数を参照するとき、あなたが$記号を省略することができます。

  • 1

    [特殊文字にスクロールすると、[[という別のエントリが表示され、その違いの説明にリンクしています。その下に((のエントリもあります。希望が助けてくれる!

    関連する問題