コマンドライン端末での乗算


115

ラボ端末への入力にシリアルターミナルを使用しています。私はそれを使って見つけました

$ echo "5X5"

の文字列を返すだけです"5X5"。乗算演算を実行するコマンドはありますか?

回答:



45

より高度で正確な数学については、bc(1)の使用を検討してください。

echo "3 * 2.19" | bc -l 
6.57

19

内部メソッド

Bashは、を使用した算術展開をサポートしてい$(( expression ))ます。例えば:

$ echo $(( 5 * 5 ))
25

外部メソッド

bcexprなど、いくつかのユーティリティが算術を提供します。

$ echo '5 * 5' | /usr/bin/bc
25

$ /usr/bin/expr 5 \* 5
25

15

古典的な解決策は次のとおりです。

 expr 5 \* 5

別の良いオプションは:

 echo 5 5\*p | dc

これらのソリューションはどちらも整数オペランドでのみ機能します。


1
dcフロートで動作します。お試しくださいecho '4 k 50 7 / p' | dc。出力は7.1428です。kコマンドは、精度を設定します。
追って通知があるまで一時停止。

@Dennis dcの2つの異なる実装では、viaを割り当てずにfloat演算が機能しているのがわかりkます。私は確かにデフォルトの精度が0(整数への切り捨て)であることを覚えています。私は覚えていませんか、それとも単に新しい実装が動作を変更したということですか?
ウィリアムパーセル

私はdc代数的でRPNが少ないので、長年にわたってほとんど使用していなかったので、覚えていません。私が使用しているGNUシステムでは、デフォルトは0です。古い(1993)FreeBSD manページでは、デフォルトが0であると記載されていますが、古いBSD manページではそうではありません。
追って通知があるまで一時停止。

ちなみに(将来の読者のために)、私の例では、アサーションに正確に対抗するために、非整数の結果だけではなく、非整数のオペランドを示しているはずです。恐れる必要はありませんecho '4 k 50.5 7 / p' | dc(出力:)7.2142
追って通知があるまで一時停止。

8

単純なシェル関数(sedは不要)は、「5X5」を解釈するトリックを実行する必要があります

$ function calc { bc -l <<< ${@//[xX]/*}; };
$ calc 5X5
25
$ calc 5x5
25
$ calc '5*5'
25

6

私は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

4

これに使用する簡単なスクリプトがあります。

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' (式に括弧が含まれている場合は、引用符を使用する必要があります)。

乗算に「x」を使用するというあなたの考えが好きです。同様に、括弧の代わりに角括弧を使用して、引用符の必要性を回避できます。tr複数の文字の文字マッピングを行うために使用できます。
追って通知があるまで一時停止。

3

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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.