2012-10-23

より良いbashスクリプトのための8つのTips


他にも if文の代わりに && や || が使えるとか。
一行で書けちゃいます。



※7行目で # 同じ とコメントしてありますが、厳密には終了ステータスが違う場合があったりします。if文は then または else 直後のリストが実行されなかった場合「0」が返るという仕様だからです。例で言えば [ "$#" != 0 ] の場合が該当します(実装時に気にする必要性は低そうではありますが)。



■ LINUXの系譜


「なぜshellでは true が 0 で, false が 1 なの?」という疑問。これ、僕も気になっていた!
コマンドで言うと、
false; echo $? # 解説: false は 1 を返すコマンド。それを ; で繋いで, $? で終了ステータスをechoしている。当然結果は「1」
それに対する答えが「成功した時には何も返さないのがLINUX流だから」。成功時には何も出力せず、エラー時にのみエラー出力するという思想。これがbashスクリプトの bool型にも現れていたのですね!


■ 参考文献


『シェルスクリプト 基本リファレンス』、良本。bash以外のsh(FreeBSD, Solaris)との互換性にも気を配って書かれているのがすごく嬉しい。そしてbashってそんなに進化しなさそうなのに改訂新版になっているのにも細やかな愛を感じる(僕が参考にしたのは旧版)。

boolean - Why 0 is true but false is 1 in the shell? - Stack Overflow

@ymkjp