shでの数値の計算
shでは(( exp ))
で計算できる
$ a=100 $ a=$((a+1)) $ echo $a 101 $
数字以外を指定するとエラーになる
$ a=abc $ a=$((a+1)) sh: 2: Illegal number: abc $ echo $? 2 $ echo $a abc $
計算を関数にした場合、数値以外を指定すると、
エラーになった箇所で止まってしまう。
(a+1の次の行、ここではb=$?以降が実行されない)
f1() { echo f1 a="abc" a=$((a+1)) 2>/dev/null b=$? echo $a return $b }
※計算の標準エラー出力をすてる場合、Ubuntoのshは上の方法で可能だが、
HP-UXではできない。HP-UXでは { a=a=$((a+1)); } 2>/dev/null
計算をexpr
で実施するとエラー以降の行も実行される
a=$(expr $a + 1 2>/dev/null)
(( exp ))
形式でのエラーのときも処理を止めないようにする方法はあるのだろうか。