回答:
はい、bashの組み込みの算術拡張$(( ))
を使用して、簡単な計算を行うことができます
$ echo "$((5 * 5))"
25
BashリファレンスマニュアルのShell Arithmeticセクションを確認してください演算子の完全なリストについて。
Bashは、を使用した算術展開をサポートしてい$(( expression ))
ます。例えば:
$ echo $(( 5 * 5 ))
25
bcやexprなど、いくつかのユーティリティが算術を提供します。
$ echo '5 * 5' | /usr/bin/bc
25
$ /usr/bin/expr 5 \* 5
25
古典的な解決策は次のとおりです。
expr 5 \* 5
別の良いオプションは:
echo 5 5\*p | dc
これらのソリューションはどちらも整数オペランドでのみ機能します。
k
ます。私は確かにデフォルトの精度が0(整数への切り捨て)であることを覚えています。私は覚えていませんか、それとも単に新しい実装が動作を変更したということですか?
dc
代数的でRPNが少ないので、長年にわたってほとんど使用していなかったので、覚えていません。私が使用しているGNUシステムでは、デフォルトは0です。古い(1993)FreeBSD man
ページでは、デフォルトが0であると記載されていますが、古いBSD man
ページではそうではありません。
echo '4 k 50.5 7 / p' | dc
(出力:)7.2142
。
私はbc
、浮動小数点計算を使用し、したがってサポートするこの関数を使用します。
c () {
local a
(( $# > 0 )) && a="$@" || read -r -p "calc: " a
bc -l <<< "$a"
}
例:
$ c '5*5'
25
$ c 5/5
1.00000000000000000000
$ c 3.4/7.9
.43037974683544303797
Bashの算術展開は浮動小数点をサポートしていません(Kornシェルとzshはサポートしています)。
例:
$ ksh -c 'echo "$((3.0 / 4))"'
0.75
これに使用する簡単なスクリプトがあります。
me@mycomputer:~$ cat /usr/local/bin/c
#!/bin/sh
echo "$*" | sed 's/x/\*/g' | bc -l
それは変更x
に*
以来、*
シェルでの特殊文字です。次のように使用します。
c 5x5
c 5-4.2 + 1
c '(5 + 5) * 30'
(式に括弧が含まれている場合は、引用符を使用する必要があります)。tr
複数の文字の文字マッピングを行うために使用できます。
Pythonが好きで、パッケージをインストールするオプションがある場合は、私が作成したこのユーティリティを使用できます。
# install pythonp
python -m pip install pythonp
pythonp "5*5"
25
pythonp "1 / (1+math.exp(0.5))"
0.3775406687981454
# define a custom function and pass it to another higher-order function
pythonp "n=10;functools.reduce(lambda x,y:x*y, range(1,n+1))"
3628800
dc
フロートで動作します。お試しくださいecho '4 k 50 7 / p' | dc
。出力は7.1428
です。k
コマンドは、精度を設定します。