web-dev-qa-db-ja.com

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

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

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

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

[[[の基本的な違いは知っていますが、他の質問は謎です。

前もって感謝します

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

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

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

5
qbi