2

UNIX で bc コマンドを使用して、いくつかの数式を解析しています。私は2つの小さな機能を持っています:

function bashcalc {
      echo $@ | bc -l
}

function2 {
      ...
      catMinusMouse=$(bashcalc "$cat_angle - $mouse_angle")
      cos=$(cosine $catMinusMouse)
      val=$(bashcalc "$cat_radius * $cos")   ##PARSE ERROR
      ...
}

val に続く式を実行しようとすると、かなりの数の "(standard_in) 1: parse error" が発生しました。

最初に考えたのは、アスタリスクが問題だと思ったので、エスケープしてみました。しかし、それは私に不正な文字エラーを与えました。

解決策は、すべての空白を削除することになりました

   val=$(bashcalc "$cat_radius*$cos")

質問: catMinusMouse の計算 (減算演算子の前後にスペースを使用) が機能するのに、乗算を含む同じ形式が機能しないのはなぜですか?

4

3 に答える 3

3

をエスケープする*か、「引用符」で囲む必要があります

3 種類:

#!/bin/bash

function bashcalc {
    echo "$@" | bc -l
}

function2() {
    cat_radius=0.9
    catMinusMouse=0.4

    val=$(bashcalc "$cat_radius" "*" "c($catMinusMouse)")
    echo $val

    #or
    val=$(bashcalc "$cat_radius * c($catMinusMouse)")
    echo $val

    #or
    val=$(bc -l <<EOF
$cat_radius * c($catMinusMouse)
EOF
)
    echo $val
}

function2
于 2013-05-01T10:25:28.070 に答える