[Armadillo:08399] Re: testコマンド構文について
Ken-ichi Suzuki
email@hidden
2012年 11月 2日 (金) 18:23:18 JST
東北工大の鈴木です.
> From: "Yanagihara, Kosaku" <email@hidden>
> Date: Fri, 2 Nov 2012 15:59:58 +0900
>
> Makefileの中に散見される
> [ ! -d $$i ] || make -C $$i
> のような構文は、
> [ -d $$i ] && make -C $$i
> と同じ意味だとおもうのですが、なぜ否定(!)の否定(||)で記述されているので
> しょうか?
|| は否定ではなく or ですね.
> 最初、意味が(論理がまわりくどくて)分からなかったのですが、新たにMakefile
> に追記していく場合、記述スタイルを揃える事以外に、同じ構文をとるべき必然性
> はありますか?
>
> 例えば&&の記法では、誤動作するとか・・・!?
make は,他に指定がなければ,実行するコマンドがエラー(返り値0以外)に
なったとき,ただちに止まります.
したがって,ディレクトリ $$i が存在しなかった場合には,
[ -d $$i ] && make -C $$i
では,[ -d $$i ] が 1 を返した時点でこの行はエラーとみなされますので,
make が止まります.
一方,
[ ! -d $$i ] || make -C $$i
であれば,$$i が(ディレクトリとして)存在しなかったら
[ ! -d $$i ] → 0 (成功)を返すので,エラーにならず次に進める.
ですし,$$i が存在する場合には,
[ ! -d $$i ] → 1 (失敗)を返すが,make -C $$i が失敗しなければ,エラー
にならず次に進める.
ということで,どちらの場合でも大丈夫になります.
あるいは,
&& で結合した場合,失敗した時点で止まる.
|| で結合した場合,成功するまでは,とにかく進む.
と見てもらうと良いかもしれません.
--
鈴木 健一 | 東北工業大学情報通信工学科
email@hidden
Tel: 022-305-3426
Fax: 022-305-3402
armadillo メーリングリストの案内