「ブロック機能」のリニューアルについて

UNIXのシェルスクリプトで負の数の符号を反転して生の数にしようと思ったらうまくできませんでした。

#! /bin/sh

NUM=4
NUM2=-$NUM
echo NUM2=$NUM2
とすると
--4
となってしまいました。
また、
NUM2=`expr $NUM * (-1)`
等もやってみたのですが、エラーになりました。
結局、文字列としてawkで'-'を削ったのですが、やり方を間違えてる気がしてなりません。
awkやperl等を使わず、UNIXの単純な機能だけで数の正負を反転させる方法があれば教えてください。

基本情報でよくある2進数の符号の反転のやり方でもできると思うのですが、
10進数だとやり方がよくわかりません、、これでできるなら、このやり方も教えていただけるとありがたいです。

以上、よろしくお願いします。

教えて!goo グレード

A 回答 (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=m …
    • good
    • 0

let NUM2=-$NUM

    • good
    • 0

NUM2=`expr $NUM \* \( -1 \)`


では、どうですか?
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

教えて!goo グレード

人気Q&Aランキング