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 上での動作です。