概要
関数やコマンドの戻り値を判定して、条件分岐させたいときにいくつか書き方が考えられるのでまとめてみる。
1. $? を使った典型的な if-then
hogehoge
if [ $? -ne 0 ]; then
# エラー処理
fi
- 直感的でわかりやすい
- ちょっと冗長
-
set -e
しているときにhogehoge
が失敗すると、エラー処理までたどり着かない
2. $? を使わずに if-then
if ! hogehoge; then
# エラー処理
fi
-
- よりも 1 行削れる
- その分直感的に欠ける?
3. if を使わずに OR 演算子で判定
hogehoge || {
# エラー処理
}
-
||
は左辺のコマンドが異常終了 (戻り値が 0 以外) した際に右辺を評価する。波括弧{ }
でくくることで評価の対象を複数行で書くことができる - 見た目が無名関数っぽくてかっこいい
- でも慣れていない人にとっては読み辛いかも
まとめ
多少の冗長性は犠牲にしてでも、慣れ親しんだ・読みやすい記法に倒したほうが (特に Bash においては) バグを生みにくいのではないかと個人的には感じる。