如何定义一个`bc` 函数供以后使用?

ixt*_*lix 9 shell bc

我总觉得bc有些神秘和耐人寻味。这是一个原来的Unix程序。它本身就是一种编程语言。所以我很乐意抓住任何我能找到的机会来使用它。

由于 bc 似乎不包括阶乘函数,我想定义一个这样的:

define fact(x) {
  if (x>1) {
    return (x * fact(x-1))
  }
  return (1)

}
Run Code Online (Sandbox Code Playgroud)

但是......我不能重复使用它,是吗?

我希望能够做类似的事情

me@home$ bc <<< "1/fact(937)"
Run Code Online (Sandbox Code Playgroud)

jw0*_*013 11

将您的函数定义保存在类似 的文件中factorial.bc,然后运行

bc factorial.bc <<< '1/fact(937)'
Run Code Online (Sandbox Code Playgroud)

如果您希望在运行时始终加载阶乘函数bc,我建议bc使用 shell 脚本或函数包装二进制文件(脚本或函数是否最好取决于您想如何使用它)。

脚本 ( bc, 放入~/bin)

#!/bin/sh

/usr/bin/bc ~/factorial.bc << EOF
$*
EOF
Run Code Online (Sandbox Code Playgroud)

函数(放入shell rc文件)

bc () {
    command bc ~/factorial.bc << EOF
$*
EOF
}
Run Code Online (Sandbox Code Playgroud)

bcPOSIX 规范

它应该从给定的任何文件中获取输入,然后从标准输入中读取。

  • 一个不那么小的“改进”:在包装器脚本/函数中,使用“/usr/bin/bc”(或任何路径)而不是“bc”调用原始程序,否则包装器会不断递归地调用自身!对于shell函数,你也可以执行`command bc`。 (2认同)