あたた日記

あたたん。

exprで負の数を含む計算が失敗する【FreeBSD】

exprコマンドで少しハマったこと。

HackerRankの問題を解くのに「簡単そうだからシェルスクリプトでやってみるか」とガリガリ書いてみたが、
どうもexprの計算でエラーになる箇所がある。

### 1つ目が正の数だと、エラーにならない
% expr 1 + -1
0
### 1つ目が負の数だと、エラーになる
% expr -1 + 1
expr: illegal option -- 1
expr: usage: expr [-e] expression

%

どうやらFreeBSDのexprコマンドでは、第一引数に負の数を渡すと
エラーになる仕様みたい。
http://www.freebsd.org/cgi/man.cgi?query=expr&sektion=&n=1
"EXAMPLE"の項目に、「negative number(負の数)は括弧で囲むように」って書いてある。
しかも、括弧をつけるときはエスケープしてあげないといけない。

### '('や')'をエスケープしないとエラー
% expr ( -1 + 1 )
Badly placed ()’s.
### \でエスケープしたら成功
% expr \( -1 + 1 \)
0
%

そういえば、dateコマンドで表示する日付をずらすときも
FreeBSDではコマンドが違ったような。
d.hatena.ne.jp