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

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

我一直觉得bc有点神秘和有趣。这是其中之一原始的 Unix 程序。它本身就是一种编程语言。所以我很乐意抓住任何机会来使用它。由于bc似乎不包含阶乘函数,我想这样定义一个:

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

但是……我不能再重复使用它,可以吗?我希望能够做类似的事情

me@home$ bc <<< "1/fact(937)"

答案1

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

bc factorial.bc <<< '1/fact(937)'

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

脚本 ( bc, 放入~/bin)

#!/bin/sh

/usr/bin/bc ~/factorial.bc << EOF
$*
EOF

函数(放入shell rc文件中)

bc () {
    command bc ~/factorial.bc << EOF
$*
EOF
}

来自bcPOSIX 规范:

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

答案2

比为 编写 shell 包装函数稍好一些,您可以在环境变量中bc指定 GNU 的默认参数。bc因此,将配置文件.bcrc或其他内容放入您的主目录中,然后

export BC_ENV_ARGS="$HOME/.bcrc "

来自GNUbc手册:

BC_ENV_ARGS  
    This is another mechanism to get arguments to bc. The format is the same
    as the command line arguments. These arguments are processed first, so
    any files listed in the environment arguments are processed before any
    command line argument files. This allows the user to set up "standard"
    options and files to be processed at every invocation of bc. The files
    in the environment variables would typically contain function
    definitions for functions the user wants defined every time bc is run.

相关内容