次のbashを書くことに実質的な違いがあるかどうか疑問に思います。
if [ <some condition> ]; then
<some statement>
fi
そして次:
[ <some condition> ] && {
<some statement>
}
実行方法に違いはありますか、それとも同じですか?
答え1
この時点では、論理的、言語的違いはあまりありません。しかし、より大きなものに拡張したい場合、冗長な構文はif
sとを追加するためのより多くのスペースを提供します。論理演算子にこだわると、読みにくくなります。自分で試してみてください。elif
else
たとえば、および&&
/またはを使用して、以下を書き換えます||
。
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はサポートされています。