2006-10-17-1

シェルの論理演算子 && と test コマンドの論理演算子 -a [linux]

よくシェルの条件式で使われる AND 論理演算子の && や -a.
実は動作が異なることを最近知りました。 例えば、以下。
if [ -n "$num" ] && [ "$num" -lt "$MAX" ]; then ...
$num が null ではなく、$MAX より小さい場合は ...を行うという条件文です。 $num が null の場合、-n の評価で偽となるため -lt は評価されません。 test コマンドの -a を使って以下のように書くと。。
if [ \( -n "$num" \) -a \( "$num" -lt "$MAX" \) ]; then ...
 -lt の部分も評価されます。
 -lt は 2 項演算子ですが、$num が null のためエラーとなってしまいます。 今回の意図通りに動作させるには && を使った方が正解。 ref.
- 入門bash 第3版 p.125[" style=(jp/e/ir?t=oranjeblog-1-22&l=ur2&o=9" width="1" height="1" border="0)] <> [" style=(jp/e/ir?t=oranjeblog-1-22&l=ur2&o=9" width="1" height="1" border="0)]

トラックバック 2006-10-17 Tue