関数と -e オプションを併用すると意図通りに動作しないのはなぜ?
次のようなスクリプトを書きました。
#!/bin/sh
set -e
hoge() {
false
echo "I don't want to see this message."
}
hoge && \
echo "... Nor this Message"
-e
のオプションをセットしているので、何も表示されないだろうと期待していました。具体的には、
- hoge 関数は、最初のコマンドが
false
なので、 set-e
の効果によりエラー exit する。 - hoge コマンドがエラー終了したので、 && の後半は実行されない。 もしくは、 最初の false を実行した時点でそもそも exit する。
しかし、出力は次の通りになります。
I don't want to see this message.
... Nor this Message
一体何がどうしてこれらのメッセージは表示されているのでしょうか。