シェル操作で構文エラーが発生するのはなぜですか?

シェル操作で構文エラーが発生するのはなぜですか?

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逆ポーランド表記法の場合)があります。

関連情報