たかまるの雑記

たまに更新

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 ))形式でのエラーのときも処理を止めないようにする方法はあるのだろうか。