echo 3+3
Bashでこのような式を評価するにはどうすればよいですか、この場合は6になりますか?
zsh/kshなどのシェルでは、数学に浮動小数点数を使用できます。さらに強力な数学が必要な場合は、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
echo $(( 3+3 ))
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 |紀元前
多くの方法-ほとんどの移植性は expr コマンドを使用することです:
expr 3 + 3
((3 + 3))メソッドは、外部バイナリではなくシェルによって解釈されるため、最も高速であると思います。最も効率的な方法として、提案されているすべての方法を使用して大きなループを作成します。
BCの使用例であるデニスのおかげで解決しました。
$ cat calc_velo.sh
#!/bin/bash
for i in `cat ball_dropping_times`
do
echo "scale=20; $i / 59.5" | bc
done > ball_velocities
この点で役立つかもしれないユースケースの1つは、オペランド自体の1つがbashコマンドである場合、これを試してみることです。
echo $(( `date +%s\`+10 ))
またはecho $(( `date +%s\`+(60*60) ))
私の場合、Unixtimeを現在時刻よりもそれぞれ10秒と1時間遅くしようとしていました。
数学処理の私の理解には、浮動小数点処理が含まれます。
bashj( https://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サーバーによって提供されます)。
また、.doubleEval(1/2)は(整数)の代わりに.5(浮動小数点)を提供することに注意してください。