文字通り使用すると、echo "20+5"
テキスト「20+5
」が生成されます。
25
この場合、数値の合計を取得するにはどのようなコマンドを使用できますか?
また、浮動小数点に bash を使用する最も簡単な方法は何ですか? たとえば、:(echo $((3224/3807.0))
と出力します。0
私は、基本的なコマンド シェル (「コマンド ライン」) 自体を使用するか、コマンド ラインから使用できる言語を使用して回答を探しています。
答え1
オプションはたくさんあります!!!
まとめ
$ printf %.10f\\n "$((10**9 * 20/7))e-9" # many shells. Not mksh.
$ echo "$((20.0/7))" # (ksh93/zsh/yash, some bash)
$ awk "BEGIN {print (20+5)/2}"
$ zcalc
$ bc <<< 20+5/2
$ bc <<< "scale=4; (20+5)/2"
$ dc <<< "4 k 20 5 + 2 / p"
$ expr 20 + 5
$ calc 2 + 4
$ node -pe 20+5/2 # Uses the power of JavaScript, e.g. : node -pe 20+5/Math.PI
$ echo 20 5 2 / + p | dc
$ echo 4 k 20 5 2 / + p | dc
$ perl -E "say 20+5/2"
$ python -c "print(20+5/2)"
$ python -c "print(20+5/2.0)"
$ clisp -x "(+ 2 2)"
$ lua -e "print(20+5/2)"
$ php -r 'echo 20+5/2;'
$ ruby -e 'p 20+5/2'
$ ruby -e 'p 20+5/2.0'
$ guile -c '(display (+ 20 (/ 5 2)))'
$ guile -c '(display (+ 20 (/ 5 2.0)))'
$ slsh -e 'printf("%f",20+5/2)'
$ slsh -e 'printf("%f",20+5/2.0)'
$ tclsh <<< 'puts [expr 20+5/2]'
$ tclsh <<< 'puts [expr 20+5/2.0]'
$ sqlite3 <<< 'select 20+5/2;'
$ sqlite3 <<< 'select 20+5/2.0;'
$ echo 'select 1 + 1;' | sqlite3
$ psql -tAc 'select 1+1'
$ R -q -e 'print(sd(rnorm(1000)))'
$ r -e 'cat(pi^2, "\n")'
$ r -e 'print(sum(1:100))'
$ smjs
$ jspl
$ gs -q <<< "5 2 div 20 add ="
詳細
シェル
POSIX算術拡張を使用することができます整数算術echo "$((...))"
:
$ echo "$((20+5))"
25
$ echo "$((20+5/2))"
22
非常にポータブル(ash dash yash bash ksh93 lksh zsh
):
printf の浮動小数点数を出力する機能を使用すると、限られた範囲 (10 桁以下) ではありますが、ほとんどのシェルを拡張して浮動小数点数演算を行うことができます。
$ printf %.10f\\n "$((1000000000 * 20/7 ))e-9"
2.8571428570
ksh93
、yash
そしてzsh
ここではフロートをサポートします:
$ echo "$((1.2 / 3))"
0.4
のみksh93
(直接)そしてzsh
ここでライブラリ mathfunc を読み込みます:
$ echo "$((4*atan(1)))"
3.14159265358979324
(のような機能を取得するにはzsh
ロードする必要があります)。zmodload zsh/mathfunc
atan
zsh で対話的に:
$ autoload zcalc
$ zcalc
1> PI/2
1.5708
2> cos($1)
6.12323e-17
3> :sci 12
6.12323399574e-17
(t)cshの場合(整数のみ):
% @ a=25 / 3; echo $a
8
シェル族ではrc
、akanga
算術展開を持つものになります。
; echo $:25/3
8
POSIX ツールチェスト
bc
(インタラクティブモードについては下記を参照)、マニュアルはこちら
記憶法: best calculator (ただし、はb
実際には基本的な)。
$ echo 20+5/2 | bc
22
$ echo 'scale=4;20+5/2' | bc
22.5000
(任意精度の数値をサポート)
bc インタラクティブモード:
$ bc
bc 1.06.95
Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'.
5+5
10
2.2+3.3
5.5
急ぐの解決策、expr
(インタラクティブモードなし):
$ expr 20 + 5
25
$ expr 20 + 5 / 2
22
ジョシュアの解決策:awk
(インタラクティブモードなし):
$ calc() { awk "BEGIN{print $*}"; }
$ calc 1/3
0.333333
その他のポータブルツール
アルセージュの解決策、dc
(インタラクティブモード: dc
):
逆ポーランド記法で動作するので、さらに楽しいです。
$ echo 20 5 2 / + p | dc
22
$ echo 4 k 20 5 2 / + p | dc
22.5000
しかし、逆ポーランド記法を頻繁に使用しない限り、それほど実用的ではありません。
はPOSIXよりdc
古くbc
、bc
歴史的にはラッパーとして実装されていましたがdc
、dc
POSIXによって標準化されていませんでした。
DQディムズのcalc
(必須sudo apt-get install apcalc)
:
$ calc 2 + 4
6
汎用言語インタープリタ:
管理作業の解決策、node
(対話モード: node
; 出力機能は必要ありません):
$ node -pe 20+5/2 # Uses the power of JavaScript, e.g. : node -pe 20+5/Math.PI
22.5
パール(インタラクティブモード: perl -de 1
):
$ perl -E "say 20+5/2"
22.5
パイソン(対話モード: python
; 出力機能は必要ありません):
$ python -c "print(20+5/2)"
22 # 22.5 with python3
$ python -c "print(20+5/2.0)"
22.5
任意精度の数値もサポートします:
$ python -c 'print(2**1234)'
295811224608098629060044695716103590786339687135372992239556207050657350796238924261053837248378050186443647759070955993120820899330381760937027212482840944941362110665443775183495726811929203861182015218323892077355983393191208928867652655993602487903113708549402668624521100611794270340232766099317098048887493809023127398253860618772619035009883272941129544640111837184
あなたが持っている場合clisp
インストールすると、ポーランド語表記も使用できるようになります。
$ clisp -x "(+ 2 2)"
マルコの解決策、lua
(インタラクティブモード: lua
):
$ lua -e "print(20+5/2)"
22.5
PHP の(インタラクティブモード: php -a
):
$ php -r 'echo 20+5/2;'
22.5
ルビー(対話モード: irb
; 出力機能は必要ありません):
$ ruby -e 'p 20+5/2'
22
$ ruby -e 'p 20+5/2.0'
22.5
狡猾さ(インタラクティブモード: guile
):
$ guile -c '(display (+ 20 (/ 5 2)))'
45/2
$ guile -c '(display (+ 20 (/ 5 2.0)))'
22.5
スラング(対話モード: slsh
; 出力関数は不要、;
ターミネータのみ必要):
$ slsh -e 'printf("%f",20+5/2)'
22.000000
$ slsh -e 'printf("%f",20+5/2.0)'
22.500000
Tcl(対話モード: tclsh
; 出力機能は必要ありませんが、expr
あります):
$ tclsh <<< 'puts [expr 20+5/2]'
22
$ tclsh <<< 'puts [expr 20+5/2.0]'
22.5
ジャバスクリプトシェル:
$ smjs
js> 25/3
8.333333333333334
js>
$ jspl
JSC: 25/3
RP: 8.33333333333333
RJS: [object Number]
JSC:
Good bye...
$ node
> 25/3
8.333333333333334
>
さまざまな SQL:
SQLite(インタラクティブモード: sqlite3
):
$ sqlite3 <<< 'select 20+5/2;'
22
$ sqlite3 <<< 'select 20+5/2.0;'
22.5
マイグレーション:
mysql -BNe 'select 1+1'
PostgreSQL:
psql -tAc 'select 1+1
_mysql と postgres のオプションにより、「ASCII アート」画像が停止します。
数学に特化した言語:
Rプレーンモードでは、1000個の正規乱数を生成し、標準偏差を取得して印刷します。
$ R -q -e 'print(sd(rnorm(1000)))'
> print(sd(rnorm(1000)))
[1] 1.031997
R使用して小さいスクリプト - 円周率の2乗を出力します
$ r -e 'cat(pi^2, "\n")'
9.869604
$ r -e 'print(sum(1:100))'
[1] 5050
パリ/GP、数論、線形代数、その他多くのことを扱う広範なコンピュータ代数システム
$ echo "prime(1000)"|gp -q
7919 // the 1000th prime
$ echo "factor(1000)" | gp -q
[2 3]
[5 3] // 2^3*5^3
$ echo "sum(x=1,5,x)" | gp -q
15 // 1+2+3+4+5
GNU オクターブ(主に数値計算を目的とした高水準のインタプリタ言語)
複素数もサポートします:
$ octave
>> 1.2 / 7
ans = 0.17143
>> sqrt(-1)
ans = 0 + 1i
ジュリア科学計算および数値計算用の高性能言語およびインタープリタ。
非対話型オプション:
$ julia -E '2.5+3.7'
6.2
ゴーストスクリプト
GhostScriptはPostScriptインタープリタであり、非常に古いディストリビューションでも一般的にインストールされています
。PostScriptドキュメントサポートされている数学コマンドのリスト。
インタラクティブな例:
$ GS_DEVICE=display gs
GPL Ghostscript 9.07 (2013-02-14)
Copyright (C) 2012 Artifex Software, Inc. All rights reserved.
This software comes with NO WARRANTY: see the file PUBLIC for details.
GS>5 2 div 20 add =
22.5
GS>
答え2
計算方法はたくさんあります。簡単な式の場合は、bash
それ自体を使用できます。
echo $((20+5))
またはexpr
:
expr 20 + 5
複雑なケースには素晴らしいツールがありますbc
:
echo "20+5" | bc
ちなみに、bc はルート、対数、cos、sin などを含む非常に複雑な式も計算できます。
答え3
まだ誰もawkについて言及していないのですか?
POSIX シェル関数と awk の数学機能を使用して、次の (1 行の) 関数を定義するだけです。
calc(){ awk "BEGIN { print $*}"; }
次に、次のようなものを実行しますcalc 1+1
。calc 5/2
注: 関数を常に利用できるようにするには、~/.bashrc (または対応するシェルの起動ファイル) に追加します。
もちろん、次の内容を持つ「calc」という名前の小さなスクリプトです。
#!/bin/sh -
awk "BEGIN { print $* }"
も機能する可能性があります。
答え4
以下を使用できますcalc
:
他の引数なしで入力すると、calc
対話モードになり、計算を続けることができます。終了するには、exit と入力します。
C-style arbitrary precision calculator (version 2.12.3.3)
Calc is open software. For license details type: help copyright
[Type "exit" to exit, or "help" for help.]
; 2+4
6
; 3+5
8
; 3.4+5
8.4
; 2^4
16
; exit
または、式を引数として使用して答えを出して終了します。
$calc 2 + 4
6
$
calc
は に似ていますがbc
、デフォルトとしての動作の方が気に入っています