Linuxシェルスクリプト()に問題がありますsh
。
組み合わせを計算するスクリプトを作成しようとしていますが、関数を計算しようとするとオーバーフローが発生しているようです。だから別のスキルを試しています。この技術では、以下を使用しました。
a=`expr $var1 \* $var2 / $var3`
これによりエラーが発生し、明らかにこれを行うことはできません。
a=`expr ($var1 \* $var2) / $var3`
なぜなら、これもエラーを引き起こすからです。
どうすればいいですか?
答え1
dc
任意の精度結果に使用できます。
precision=4 var1=3 var2=4 var3=5
a=`echo "$precision k $var1 $var2 * $var3 /p" | dc`
これは1977年頃以来、ほぼすべてのUnix亜種で動作します。 gnu dcが利用可能であることを知っていれば、もっと簡単です。
a=`dc -e "$precision k $var1 $var2 * $var3 /p"`
使用できます。
答え2
括弧付きの例では、括弧もエスケープする必要があります。 (expr \( $var1 + $var2 \) / $var3
スペースを省略しないでください。そうしないとexpr
エラーが発生します)。
bash
次のように組み込みの算術拡張を使用することもできます。echo $(( ($var1+$var2)/$var3 ))
bc
中位計算の場合(dc
逆ポーランド表記法の場合)があります。