私は、実験室に入力を提供するためにシリアル端末を使用しています。私はそれを使用していることがわかりました
$ echo "5X5"
"5X5"
の文字列を返すだけです。乗算演算を実行するコマンドはありますか?
はい、 bashの組み込み算術展開$(( ))
を使用して簡単な数学を実行できます
$ echo "$((5 * 5))"
25
演算子の完全なリストについては、 Bashリファレンスマニュアルのシェル演算セクション を確認してください。
より高度で正確な数学については、bc(1)の使用を検討してください。
echo "3 * 2.19" | bc -l
6.57
Bashは、 算術展開 with $(( 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
これらのソリューションは両方とも整数オペランドでのみ機能します。
単純なシェル関数(sedは不要)は、「5X5」を解釈するトリックを実行する必要があります
$ function calc { bc -l <<< ${@//[xX]/*}; };
$ calc 5X5
25
$ calc 5x5
25
$ calc '5*5'
25
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の算術展開は、floatをサポートしていません(ただし、Korn Shellと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'
(式に括弧が含まれる場合は、引用符を使用する必要があります)。pythonが好きで、パッケージをインストールするオプションがある場合は、この tility を使用できます。
# 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