« バッグハンガー買った その2 | トップページ | プリンタ購入 »

2010年4月12日 (月)

bashの&&と||

bashで、「&&」は論理積(AND)、「||」は論理和(OR)。

どちらも演算子なので、if文などで使えるが、
別の使われ方もよく見られる。

あるコマンドの実行結果によって、別のコマンドを実行する、ってとき。

たとえば、あるコマンドの実行が成功したら、別のコマンドを実行する、ってときには、
&&」を使って、

make && make install

のように実行する。
これは、「make」が成功したら「make install」を実行する、という例。

また、あるコマンドの実行が失敗したら、別のコマンドを実行する、ってときには、
||」を使って、

[ -f /usr/sbin/sendmail ] || exit 0

のように実行する。
これは、シェルスクリプトの中での処理で、
ファイル「/usr/sbin/sendmail」が存在しなかったら、スクリプトを終了する、という例。

コマンドの実行が成功したか、失敗したかは、
コマンド自身が0(=true、実行成功)か0以外(=false、実行失敗)かを返すように
作られているので、すぐ分かる。

で、&&||は、どちらも、左辺から評価するんだけれど、
どちらの演算子も、最終目的は、式全体の結果(truefalseか)を求めること。
だから、左辺を評価して、式全体の結果が分かるなら、右辺は評価しない。

&&は左辺と右辺の両者がtrueで式全体の結果がtrueとなる演算子なので、
左辺がfalseなら、式全体はfalse確定なので、右辺を評価する必要はない。
だから、

  • 左辺がfalseなら、右辺は評価しない。
  • 左辺がtrueなら、右辺を評価する。

となり、これをコマンドに置き換えれば、
コマンド1 && コマンド2
という演算は、

  • コマンド1false(失敗)なら、コマンド2は評価しない(実行しない)。
  • コマンド1true(成功)なら、コマンド2を評価する(実行する)。

となる。

同じように、||は左辺と右辺のどちらか一方がtrueなら、
式全体のtrueが確定なので、

  • 左辺がtrueなら、右辺は評価しない。
  • 左辺がfalseなら、右辺を評価する。

となり、やはりコマンドに置き換えると、
コマンド1 || コマンド2」は、

  • コマンド1true(成功)なら、コマンド2は評価しない(実行しない)。
  • コマンド1false(失敗)なら、コマンド2を評価する(実行する)。

となる。

このような&&||の使い方は、本来の目的である演算結果は利用されず、
演算の途中経過(演算の性質)がうまく利用された例なんだね。
おもしろいねぇ。

« バッグハンガー買った その2 | トップページ | プリンタ購入 »

Linux」カテゴリの記事

2019年11月
          1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30

Amazonリンク

ダイビング写真(swf)

ブログ内検索

  • Google
    WWW を検索
    ブログ内を検索

リンク(いつもお世話さま)

  • ソニーストア
     iTunes Store(Japan)
    Just MyShop(ジャストシステム)
    ブックオフオンライン
無料ブログはココログ