「if条件then」を使用することと「condition &&{}」のみを使用することの違いは何ですか?

「if条件then」を使用することと「condition &&{}」のみを使用することの違いは何ですか?

次のbashを書くことに実質的な違いがあるかどうか疑問に思います。

if [ <some condition> ]; then
  <some statement>
fi

そして次:

[ <some condition> ] && {
  <some statement>
}

実行方法に違いはありますか、それとも同じですか?

答え1

この時点では、論理的、言語的違いはあまりありません。しかし、より大きなものに拡張したい場合、冗長な構文はifsとを追加するためのより多くのスペースを提供します。論理演算子にこだわると、読みにくくなります。自分で試してみてください。elifelse

たとえば、および&&/またはを使用して、以下を書き換えます||

if [ 1 -eq 2 ]; then echo ok; elif [ 1 -eq 1 ]; then echo lif; else echo el; fi

答え2

基本的に彼らは同じです。どちらの場合も、条件がtrueの場合にのみステートメントが実行されます。

これは文体の違いなので、最初のオプションを好みます。

答え3

すべてのシェルが以下をサポートしているわけではありません。

[ <some condition> ] && {
  <some statement>
}

一部のシェルは /usr/bin/[ にある実行可能ファイルを介してこれをサポートしています。

シェルが /usr/bin/[ を使用しているかどうかをテストするには、次のようにします。

$ builtin [
sh: 1: builtin: not found

これはシェルが/usr/bin/[を使用していることを意味しますが、他のものを取得するとシェルはそれをサポートします。

しかし、bashはサポートされています。

関連情報