文字列 - bash で浮動小数点数学を行う「無効な算術演算子」



bash 計算 変数 (2)

ここに私のスクリプトがあります、それはかなり自明です:

d1=0.003
d2=0.0008
d1d2=$((d1 + d2))

mean1=7
mean2=5
meandiff=$((mean1 - mean2))

echo $meandiff
echo $d1d2

しかし、意図した出力を取得する代わりに:0.0038 2エラー Invalid Arithmetic Operator, (error token is ".003")?

https://src-bin.com


Answer #1

浮動小数点の精度が必要ない場合は、単に小数部分を取り除くことができます。

echo $var | cut -d "." -f 1 | cut -d "," -f 1

値の整数部分を切り取ります。 cutを2回使用する理由は、地域の設定でドットを使用して小数点を区切り、他の一部がコンマを使用する可能性がある場合に整数部分を解析するためです。


Answer #2

bash は浮動小数点演算をサポートしていません。 bc ような外部ユーティリティを使用する必要があります。

# Like everything else in shell, these are strings, not
# floating-point values
d1=0.003
d2=0.0008

# bc parses its input to perform math
d1d2=$(echo "$d1 + $d2" | bc)

# These, too, are strings (not integers)
mean1=7
mean2=5

# $((...)) is a built-in construct that can parse
# its contents as integers; valid identifiers
# are recursively resolved as variables.
meandiff=$((mean1 - mean2))




math