bashの&&と||
bashで、「&&」は論理積(AND)、「||」は論理和(OR)。
どちらも演算子なので、if文などで使えるが、
別の使われ方もよく見られる。
あるコマンドの実行結果によって、別のコマンドを実行する、ってとき。
たとえば、あるコマンドの実行が成功したら、別のコマンドを実行する、ってときには、
「&&」を使って、
make && make install
のように実行する。
これは、「make」が成功したら「make install」を実行する、という例。
また、あるコマンドの実行が失敗したら、別のコマンドを実行する、ってときには、
「||」を使って、
[ -f /usr/sbin/sendmail ] || exit 0
のように実行する。
これは、シェルスクリプトの中での処理で、
ファイル「/usr/sbin/sendmail」が存在しなかったら、スクリプトを終了する、という例。
コマンドの実行が成功したか、失敗したかは、
コマンド自身が0(=true、実行成功)か0以外(=false、実行失敗)かを返すように
作られているので、すぐ分かる。
で、&&と||は、どちらも、左辺から評価するんだけれど、
どちらの演算子も、最終目的は、式全体の結果(trueかfalseか)を求めること。
だから、左辺を評価して、式全体の結果が分かるなら、右辺は評価しない。
&&は左辺と右辺の両者がtrueで式全体の結果がtrueとなる演算子なので、
左辺がfalseなら、式全体はfalse確定なので、右辺を評価する必要はない。
だから、
- 左辺がfalseなら、右辺は評価しない。
- 左辺がtrueなら、右辺を評価する。
となり、これをコマンドに置き換えれば、
「コマンド1 && コマンド2」
という演算は、
- コマンド1がfalse(失敗)なら、コマンド2は評価しない(実行しない)。
- コマンド1がtrue(成功)なら、コマンド2を評価する(実行する)。
となる。
同じように、||は左辺と右辺のどちらか一方がtrueなら、
式全体のtrueが確定なので、
- 左辺がtrueなら、右辺は評価しない。
- 左辺がfalseなら、右辺を評価する。
となり、やはりコマンドに置き換えると、
「コマンド1 || コマンド2」は、
- コマンド1がtrue(成功)なら、コマンド2は評価しない(実行しない)。
- コマンド1がfalse(失敗)なら、コマンド2を評価する(実行する)。
となる。
このような&&や||の使い方は、本来の目的である演算結果は利用されず、
演算の途中経過(演算の性質)がうまく利用された例なんだね。
おもしろいねぇ。
« バッグハンガー買った その2 | トップページ | プリンタ購入 »
「Linux」カテゴリの記事
- [Linux] ログイン画面のOS名表示など(2013.08.12)
- CentOSからWin7の共有フォルダへアクセス(2011.11.27)
- namazuのインストール手順(2011.09.02)
- mknmzで、エラー 'sh: line 1: no: command not found'(2011.08.30)
- PostgreSQL 8.1から7.3へデータ移行(2011.08.24)