• ベストアンサー

UNIXのシェルスクリプトで負数の正負を反転させるには?

UNIXのシェルスクリプトで負の数の符号を反転して生の数にしようと思ったらうまくできませんでした。 #! /bin/sh NUM=4 NUM2=-$NUM echo NUM2=$NUM2 とすると --4 となってしまいました。 また、 NUM2=`expr $NUM * (-1)` 等もやってみたのですが、エラーになりました。 結局、文字列としてawkで'-'を削ったのですが、やり方を間違えてる気がしてなりません。 awkやperl等を使わず、UNIXの単純な機能だけで数の正負を反転させる方法があれば教えてください。 基本情報でよくある2進数の符号の反転のやり方でもできると思うのですが、 10進数だとやり方がよくわかりません、、これでできるなら、このやり方も教えていただけるとありがたいです。 以上、よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • qaaq
  • ベストアンサー率36% (146/404)
回答No.3

実行例 a=-3 $ echo `expr \( $a \) \* 2` -6 $ echo `expr \( $a \) \* \-1` 3 FreeBSDの日本語マニュアルには、 >一般的には、負数となる可能性のある値は括弧で括ります とあります。 # 他のUNIXのマニュアルにはこのような具体的な記述が無い模様。 また、以下のエスケープが必要です。 "()"は、サブシェルと間違われないように「\(」,「\)」 "*"(乗算)は、ワイルドカード展開されないように 「\*」 "-1"は、オプションに間違わないように「\-1」としています。 2乗して平方根すると必ず正数になるのだが、exprには平方根がなかった。

参考URL:
http://www.jp.freebsd.org/cgi/mroff.cgi?subdir=man&lc=1&cmd=&man=expr&dir=jpman-5.4.0%2Fman&sect=0

その他の回答 (2)

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.2

let NUM2=-$NUM

  • yjous
  • ベストアンサー率60% (6/10)
回答No.1

NUM2=`expr $NUM \* \( -1 \)` では、どうですか?

関連するQ&A