次のようなスクリプトを書きました。

#!/bin/sh                                                                                                                  

set -e                                                                                                                     

hoge() {                                                                                                                   
    false                                                                                                                  
    echo "I don't want to see this message."                                                                               
}                                                                                                                          

hoge && \                                                                                                                  
    echo "... Nor this Message"

-e のオプションをセットしているので、何も表示されないだろうと期待していました。具体的には、

  1. hoge 関数は、最初のコマンドが false なので、 set -e の効果によりエラー exit する。
  2. hoge コマンドがエラー終了したので、 && の後半は実行されない。 もしくは、 最初の false を実行した時点でそもそも exit する。

しかし、出力は次の通りになります。

I don't want to see this message.                                                                                          
... Nor this Message

一体何がどうしてこれらのメッセージは表示されているのでしょうか。