2014-03-25 31 views
4

我試圖通過運行以下bash腳本減去兩個數字:expr:非整數參數。如何減點分十進制數

#!/bin/bash -x 
cur_length=`cat length.txt` 
cur_pos=`cat pos.txt` 

diff=`$(expr $cur_length - $cur_pos)` 
echo "$diff" 

但產量說EXPR有一些問題:

+++ expr 235.68 - 145.9 
expr: non-integer argument 
+ diff= 
+ echo '' 

...我已經尋找網絡上的「expr:非整數參數」,但沒有涉及點十進制數。 如何減去這樣的數字? 235.68 - 145.9

在此先感謝。

回答

6

Bash不會做分數,只是整數。使用bc代替:

$ echo '235.68 - 145.9' | bc 
89.78 

這個結果當然可以,放在一個shell變量,你用expr做同樣的方式:

$ diff="$(echo '235.68 - 145.9' | bc)" 
$ echo $diff 
89.78 
+0

感謝偉大工程。 – Coenster

+0

只是後續問題。在我的情況下,我有:'對於RSQRD $(seq 0.2 0.2 0.8);做 \t回聲「============================================= =======================「 \t echo」r-squared lower LD-threshold is:「$ RSQRD \t UPPERRSQRD = $(echo $ RSQRD + 0.2 | bc) \t echo「r平方的上限LD閾值爲:」$ UPPERRSQRD done'。這導致例如'.4'而不是'0.4'。怎麼能產生「0」? –

+0

啊。我在這裏找到了我自己的答案:http://stackoverflow.com/a/18547844/4322048。現在代碼是:'對於RSQRD in $(seq 0.2 0.2 0.8);做 \t回聲「============================================= =======================「 \t echo」r平方低LD閾值爲:「$ RSQRD \t UPPERRSQRD = $(printf」%「 0.1f \ n「$(bc -q <<< scale = 1 \; $ RSQRD + 0.2)) \t echo」r平方的上限LD閾值爲:「$ UPPERRSQRD done'。這就像一個魅力。 –