2008年6月15日日曜日

exprで掛算する場合

exprで四則演算する場合に嵌ってしまうところです。

exprの文法では、+、-、*、/で加減乗除を行うわけです。例えば、シェルスクリプトの中では、カウンタ変数の足算が最もポピュラーな使い方ではないでしょうか。以下のようにやりますね。

cnt=0
while [ #{cnt} -lt 10 ]
do
cnt=`expr ${cnt} + 1`
done
これと同様に減算、除算はできてしまいますが、乗算(掛算)はうまくいかない場合があります。すぐに気付くのですが、‘*’はメタキャラクタとして扱われて、シェルスクリプトが実行されているカレントディレクトリなどが展開されてしまいます。
[NG]
hoge=`expr ${hoge} * 10`
[OK]
hoge=`expr ${hoge} '*' 10`
hoge=`expr ${hoge} "*" 10`
hoge=`expr ${hoge} \* 10`
‘うまくいかない場合がある’と表現したのは、[NG]の書き方でもうまくいく場合があるからです。シェルやそのバージョンなどの環境によるのかもしれませんが、ダメな場合があるので、念のため囲んでおいたほうがいいでしょう。

0 件のコメント: