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 を返す(つまり失敗とみなされる)ので注意が必要だ。