Bash で if
文の代わりに &&
や ||
を使うと1行になって見た目がすっきりする。
# (A) if [ -n "$MSG" ]; then echo "$MSG" fi # (B) [ -n "$MSG" ] && echo "$MSG" # (C)
ところがこの2つは完全に等価ではない。前者では (B) の地点で return code ($?
) が (A) の地点と変わらないのに対して、後者での (C) 地点での return code は以下のようになる:
[ ]
内の条件が成立したとき:&&
の後の文の return code が return code となる。[ ]
内の条件が成立しないとき: 1 が return code となる。
スクリプトの最後に上記のような条件文を書く場合に &&
の形で書くと、想定外にスクリプトが 1 を返す(つまり失敗とみなされる)ので注意が必要だ。