/ /括弧付きのIF文と角括弧の間のbashの違い - bash、if-statement

かっこ付きのIF文と角括弧の間のbashの違い - bash、if-statement

ちょっと勉強しながら 、私は4種類の作業方法を見てきました if ステートメント:

  • 一括弧 - (...)
  • 二重括弧 - ((...))
  • シングルスクエアブラケット - [...]
  • 二重角型ブラケット - [[...]]

bashの括弧と角括弧の違いは何ですか?

回答:

回答№1の56

あなたがリストしたテスト:

  • 単一の括弧 - (...)はサブシェルを作成しています
  • 二重括弧 - ((...))は算術演算用です
  • 単一の角括弧 - [...]はPOSIXの構文です test
  • 二重角括弧 - [[...]]はbash条件式の構文です( test より強力な)

網羅的ではありません。 ブール論理

if command; then ...

コマンドも終了状態になっているためです。に bash, 0true と> 0false.

次のような終了ステータスが表示されます。

command
echo $?

見る :

http://wiki.bash-hackers.org/syntax/basicgrammar
http://wiki.bash-hackers.org/syntax/arith_expr
http://mywiki.wooledge.org/BashGuide/TestsAndConditionals


回答№2の場合は1

シェル自体はコマンドを実行し、終了コードを評価します。ゼロ終了コードは成功を意味します。他のすべての値は失敗を示します。

if command; then
: things to do if the exit code from command was 0
else
: things to do if it was not 0
fi

while command; do
: things to do if the exit code was 0
done

コマンド [ (別名 test)は非常に一般的に条件文で使用されます。元のBourneシェルには、文字列が空であるかファイルが存在するかをチェックする組み込み演算子が欠けていました。現代のシェルにはこのコマンドが組み込まれており、多くのシェルには拡張された近代化されたバージョンがあります [[しかし、これはPOSIXには適切に移植できません sh ポータブルスクリプトの場合は避ける必要があります。 この関連する質問 両者の違いをより詳しく説明しています。

記法 (( ... )) 算術コンテキストを導入する。再び、これはオリジナルのBourneシェルの一部ではないものでした(専用の外部ツール expr 現代のシェルにはこれが組み込まれています。算術演算の結果コードは、算術演算の結果が0(またはエラー)でない場合は0になります。

記法 ( command ) サブシェルを作成し、評価する command その中で。これが実際に必要で有用な状況がありますが、構文を学んでいるだけの場合は、この必要はありません。

...実際、大部分のスクリプトでは、これを条件付きで使用しているのがわかりましたが、明らかに不要です。

外を見る別の反パターン

command
if [ $? = 0 ]; then
: things
fi

調べる必要はほとんどありません $? 明示的に、特にそれをゼロと比較することは何かである if そして while 具体的に あなたのために舞台裏でやってください。これは単にリファクタリングする必要があります

if command; then
: ...