Shammer's Philosophy

My private adversaria

exprコマンド

シェルスクリプトを書くときは、常に/bin/sh用に書くようにしている。今となってはもうこのシェルはかなり原始的で、これを使うとやりにくい処理もあるが、昔はどのUNIXでも絶対に使用できるのはこのシェルだったので、移植性を考えてこのシェルで書くようになり、それが抜けきらないままだ。なので、「これを使うとやりにくい処理もあるが」と言ったものの、他のシェルを使わないので他のシェルでも同様か、あるいはそうじゃないのかは正直わからない。まあ、間違いなく便利になっているだろう、とは予想しているけれど。

B Shellを使用する際に面倒だな、と思うのは、数字の扱い。たとえば、加算を行おうとして、

a=0
a=a+1
echo ${a}

とすると、結果は「1」ではなく、「0+1」となる。この書き方では数値計算してくれないのだ。イコールとかプラスなどのオペレーションとその引数の間(上記の場合はaや1)に半角スペースが入っても満足に動作しなくなるのも不便だが・・・

上記の場合は、以下のようにすることで「1」という出力を得ることが可能だ。

a=0
a=`expr a + 1`
echo ${a}

ややこしいことに、exprを使う場合は、その対象式はちゃんと空白を入れないとダメなようだ。ちなみに、これはMac OS X 上での動作です。