48
echo 3+3

このような式をBashで、この場合は6に評価するにはどうすればよいですか?

4

9 に答える 9

106
echo $(( 3+3 ))
于 2010-03-31T10:42:01.133 に答える
32

exprこれは標準的な方法ですが、整数のみを処理します。

bashにはいくつかの拡張機能があり、整数のみを処理します。

$((3+3))  returns 6
((3+3))   used in conditionals, returns 0 for true (non-zero) and 1 for false
let 3+3   same as (( ))

let値を(( ))割り当てるために使用できます。

let a=3+3
((a=3+3))

浮動小数点には使用できますbc

エコー3+3 | 紀元前

于 2010-03-31T10:47:36.243 に答える
22

zsh / kshなどのシェルでは、数学にfloatを使用できます。より多くの数学の力が必要な場合は、次のようなツールを使用してくださいbc/awk/dc

例えば

var=$(echo "scale=2;3.4+43.1" | bc)
var=$(awk 'BEGIN{print 3.4*43.1}')

あなたがやろうとしていることを見て

awk '{printf "%.2f\n",$0/59.5}' ball_dropping_times >bull_velocities
于 2010-03-31T10:55:23.310 に答える
10

exprコマンドは次のように使用できます。

expr 3 + 3

結果を変数に格納するには、次のようにします。

sum=$(expr 3 + 3)

また

sum=`expr 3 + 3`
于 2010-03-31T10:42:13.643 に答える
3

多くの方法-最も移植性の高い方法は、exprコマンドを使用することです。

expr 3 + 3
于 2010-03-31T10:41:44.340 に答える
2

((3 + 3))メソッドは、外部バイナリではなくシェルによって解釈されるため、最も高速であると思います。最も効率的にするために提案されたすべての方法を使用して大きなループの時間を計ります。

于 2010-03-31T11:03:51.363 に答える
1

BC使用の例であるDennisのおかげで解決しました:

$ cat calc_velo.sh

#!/bin/bash

for i in `cat ball_dropping_times`
do
echo "scale=20; $i / 59.5" | bc 
done > ball_velocities
于 2010-03-31T10:56:31.887 に答える
0

私の数学処理の理解には、浮動小数点処理が含まれます。

bashjhttps://sourceforge.net/projects/bashj/ )を使用すると、単純に使用してjavaメソッド(浮動小数点処理、cos()、sin()、log()、exp()...)を呼び出すことができます。

bashj +eval "3+3"
bashj +eval "3.5*5.5"

またはbashjスクリプトでは、次のようなjava呼び出しがあります。

#!/usr/bin/bashj
EXPR="3.0*6.0"
echo $EXPR "=" u.doubleEval($EXPR)

FUNCTIONX="3*x*x+cos(x)+1"
X=3.0
FX=u.doubleEval($FUNCTIONX,$X)
echo "x="$X " => f(x)=" $FUNCTIONX "=" $FX

興味深い速度に注意してください:呼び出しごとに約10ミリ秒(答えはJVMサーバーによって提供されます)。

u.doubleEval(1/2)は、 0(整数)ではなく0.5(浮動小数点)を提供することにも注意してください。

于 2018-06-20T13:41:21.513 に答える
0

この点で役立つ可能性のあるユースケースの1つは、オペランド自体の1つがbashコマンドである場合は、これを試してみることです。

echo $(( `date +%s\`+10 ))あるいはecho $(( `date +%s\`+(60*60) ))

私の場合、Unixtimeを現在の時刻よりそれぞれ10秒と1時間遅くしようとしていました。

于 2019-06-19T23:29:35.823 に答える