7

この bash スクリプトから正しい結果を得るにはどうすればよいですか?

#!/bin/bash
echo $(( 1/2 ))

私は0結果として得ます!だから私はこれらを使用しようとしましたが、成功しませんでした:

$ echo $(( 1/2.0 ))
bash: 1/2.0 : syntax error: invalid arithmetic operator (error token is ".0 ")
$ echo $(( 1.0/2 ))
bash: 1.0/2 : syntax error: invalid arithmetic operator (error token is ".0/2 ")
4

2 に答える 2

13

floatを使用するのに適したツールではありませんを使用する必要があります。

bc <<< "scale=2; 1/2"
.50

結果を変数に格納する必要がある場合:

res=$(bc <<< "scale=2; 1/2")
echo $res
于 2012-10-25T00:23:27.383 に答える
2

私はかつて、スプートニックが作成した提案をいくらか利用しているが、bash関数をラップしている素敵なコードに出くわしました:

function float_eval()
{
    local stat=0
    local result=0.0
    if [[ $# -gt 0 ]]; then
        result=$(echo "scale=$float_scale; $*" | bc -q 2>/dev/null)
        stat=$?
        if [[ $stat -eq 0  &&  -z "$result" ]]; then stat=1; fi
    fi
    echo $result
    return $stat
}

次に、次のように使用できます。

c=$(float_eval "$a / $b")
于 2012-10-25T00:25:23.043 に答える