exprと変数を使用した算術演算

exprと変数を使用した算術演算

このステートメントが機能しないのはなぜですか?

total=`expr $mPercent / 100 "*" .482 + $fPercent / 100 "*" .518`

mPercent と fPercent は awk 文から取得した数値です。また、エラーメッセージとして「expr:数値以外の引数」が表示されます。

メモ:彼の質問の目的のために、両方の変数の値が3.27であるとしましょう。

答え1

bash浮動小数点演算は実行できず、整数演算のみ実行できます。代わりに、以下を使用することをお勧めしますbc -l

$ mPercent='2.72'
$ fPercent='3.14'
$ bc -l <<< $(echo "$mPercent / 100 "*" .482 + $fPercent / 100 "*" .518")
.02937560000000000000

答え2

このexprコマンドは整数または文字列操作のみを実行できます。このガイドのマニュアルページを確認してください。

オペランドは整数でも文字列でもかまいません。整数は、オプションで、前に「-」が付された 1 つ以上の 10 進数で構成されます。 'expr' 適用される演算に応じて、オペランドの位置に現れるすべての項目を整数または文字列に変換します。

したがって、これらのタスクを実行するには、次のコマンドライン電卓を使用する必要がありますbc

はい

$ mPercent='.123'
$ fPercent='.345'
$ echo "$mPercent / 100 * .482 + $fPercent / 100 * .518" | bc -l
.00237996000000000000

メモ: exprBashの一部ではなく、スタンドアロンの実行可能ファイルであり、coreutilsパッケージの一部です。 RPMを使用するシステムでは、次の内容を見ることができます。

$ rpm -qf $(type -p /usr/bin/expr)
coreutils-8.21-13.fc19.x86_64

3.27のコメントにある2つの変数について提供されたデータを使用すると、次の結果が得られます。

$ mPercent='3.27'
$ fPercent='3.27'
$ echo "$mPercent / 100 * .482 + $fPercent / 100 * .518" | bc -l
.03270000000000000000

答え3

私の提案はbc算術演算と<<< (ここに文字列があります)に値を入力するために使用されますbc

$ mPercent=3.27
$ fPercent=3.27

$ bc -l <<< "$mPercent / 100 * .482 + $fPercent / 100 * .518"
.03270000000000000000

ここの-lオプションを使用するbcと、より多くの数学関数で浮動小数点演算を使用できます。

関連情報