使用 bash 函数在命令行上做简单的数学运算:$1 除以 $2(可能使用 bc)

ixt*_*lix 33 command-line function arithmetic bc bashrc

有时我需要将一个数除以另一个数。如果我可以为此定义一个 bash 函数,那就太好了。到目前为止,我被迫使用诸如

echo 'scale=25;65320/670' | bc
Run Code Online (Sandbox Code Playgroud)

但如果我能定义一个看起来像的 .bashrc 函数就太好了

divide () {
  bc -d $1 / $2
}
Run Code Online (Sandbox Code Playgroud)

dog*_*ane 45

我有一个方便的 bash 函数,名为calc

calc () {
    bc -l <<< "$@"
}
Run Code Online (Sandbox Code Playgroud)

用法示例:

$ calc 65320/670
97.49253731343283582089

$ calc 65320*670
43764400
Run Code Online (Sandbox Code Playgroud)

您可以更改此设置以适合您自己。例如:

divide() {
    bc -l <<< "$1/$2"
}
Run Code Online (Sandbox Code Playgroud)

注意: <<<是一个here 字符串,它被输入到bc. 您不需要调用echo.

  • 我同意它在没有额外回声的情况下看起来更好,但由于它是一个内置的 shell,它几乎没有额外的成本。阻止我在 shell 函数中使用 '&lt;&lt;&lt;' 的原因是它对 bash 的限制,而附加的 echo 允许在原始 bourne shell 或 ksh 中使用它而无需更改。 (3认同)

rje*_*ell 20

Bash 可以在某种程度上进行数学计算。但是,它对准确性没有用,因为它是四舍五入的。

[user]$ echo $(( 10/5 ))
2
Run Code Online (Sandbox Code Playgroud)

但是您说得对 - bash 函数将是一个简单的快捷方式,您的示例基本上有效。

divide() {
  echo "scale=25;$1/$2" | bc
}
Run Code Online (Sandbox Code Playgroud)

把它放在你的 .bashrc 中,然后你可以:

[user]$ divide 10 5
2.0000000000000000000000000
Run Code Online (Sandbox Code Playgroud)


Tat*_*ser 9

您可能知道 bash 内置的“expr”,如

$ expr 60 / 5
12
Run Code Online (Sandbox Code Playgroud)

这仅限于整数并且需要参数之间的空格。

是什么阻止您按照您已经使用的 echo 表达式定义函数?IE

 divide () {
   echo $1/$2 | bc
 }
Run Code Online (Sandbox Code Playgroud)


Sté*_*nez 7

不是这个精确问题的真正答案,但知道它可能很好。使用zsh;-)

% echo $((65320./670))
97.492537313432834
Run Code Online (Sandbox Code Playgroud)